Как переместить файлы, оставив после себя символические ссылки?

9

Как я могу переместить / скопировать файлы из одного каталога в другой, оставив символические ссылки в исходном каталоге . Я знаю, что ln -sсоздает символические ссылки в месте назначения, но я хочу оставить символические ссылки в исходном каталоге и переместить фактические файлы в новый. Как я могу это сделать?

DEOX
источник
Лучший ответ на этот вопрос здесь: 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   
waltinator
источник
1
Версия cp / rm - каковы ее возможные преимущества? Похоже, он делает то же самое, только намного медленнее :)
Сергей
@Sergey Можно проверить состояние выхода cpи продолжить удаление, только если оно прошло успешно.
lgarzo
@lgarzo: Это было бы полезно, если mvбы перед удалением файла не проверялось, удалось ли выполнить копирование, но это было бы серьезной ошибкой mv:)
Сергей
Являются ли "$ new_directory" и "<файлы для обработки>" "специальными переменными", где последний аргумент, который я даю сценарию, всегда будет считаться "$ new_directory", а любые начальные аргументы считаются "<файлы для обработки>" ?. Относится ли это к любому другому сценарию, который я пишу? Или вы намекаете на то, что я должен заполнить пробелы, например, используя "$ 1" и "$ 2"? Извините за вопрос, но я очень новичок в кодировании в целом.
Deox
1
Замените $original_directoryи $new_directoryна каталоги, которые вы хотите переместить из / в, или установите их следующим образом original_directory=/home/walt/from. Для использования в скриптах вы должны разобрать аргументы самостоятельно. См getopts встроенной в man bash.
Вальтинатор