Як переміщувати файли, залишаючи позаду символьні посилання?


9

Як я можу переміщувати / копіювати файли з одного каталогу в інший, залишаючи символьні посилання в оригінальному каталозі . Я знаю, що ln -sстворює посилання в пункті призначення, але я хочу залишити символьні посилання у вихідному каталозі та перемістити фактичні файли в нові. Як я можу це зробити?


Найкраща відповідь на це питання тут: unix.stackexchange.com/a/228166/7000
Шрідхар Сарнобат

Відповіді:


4

Обробляйте файли окремо, наприклад,

cd $original_directory  
for i in <files to process> ; do  
    mv ./$i $new_directory/  
    ln -s $new_directory/$i ./$i
done

або, якщо копіює, замініть mvкомандний рядок на

    cp ./$i $new_directory/  
    rm ./$i   

1
Версія cp / rm - які можливі переваги від цього? Схоже, це робить те ж саме набагато повільніше :)
Сергій

@Sergey Можна було перевірити стан виходу cpта перейти до видалення лише у тому випадку, коли воно було успішним.
lgarzo

@lgarzo: Це було б корисно, якби mvне перевіряли, чи вдалося скопіювати копію перед видаленням файлу - але це буде серйозна помилка mv:)
Сергій

Чи є "$ new_directory" та "<файли для обробки>" "спеціальні змінні", де останній аргумент, який я даю скрипту, завжди вважатиметься "$ new_directory", і будь-які початкові аргументи вважаються "<файлами для обробки>" ?. Чи стосується це будь-якого іншого сценарію, який я пишу? Або ви маєте на увазі, що я повинен заповнити пробіли, як-от "$ 1" і "$ 2"? Вибачте за запитання, але я дуже новачка в кодуванні взагалі.
деокс

1
Замініть $original_directoryта $new_directoryвикористовуйте каталоги, з яких ви хочете перейти з / до, або встановіть їх так original_directory=/home/walt/from. Для використання в сценаріях вам доведеться самостійно розбирати аргументи. Див getopts вбудованої в man bash.
waltinator
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.