Как правильно скопировать файл в несколько папок и подпапок, не перезаписывая содержимое файла в целевых папках?
Я на самом деле попробовал существующий ответ от: Как скопировать файл в несколько папок с помощью командной строки? где я использовал команду:
find folder -exec cp file.txt {} \;
Я хотел использовать это, потому что я хотел скопировать один файл с именем "file.txt" в каталог с именем "папка" и все его подкаталоги без упоминания всех каталогов в команде.
Однако, в конечном итоге это заменило содержимое каждого файла в "папке" и его подпапках содержимым "file.txt". Например, если внутри папки находится файл "foo.txt", он все равно сохранит имя "foo.txt", но все его содержимое будет заменено на "file.txt". Это озадачило меня, и я попробовал следующий интерактивный флаг:
find folder -exec cp -i file.txt {} \;
и я получил запросы на перезапись для каждого отдельного файла в папке "directory" и для всех его подкаталогов, хотя имена были разными.
Может кто-нибудь помочь мне разобраться, что происходит и какой должна быть соответствующая команда?
1 ответ
Вы должны ограничить find
только перечисление каталогов:
find folder -type d -exec cp file.txt {} \;
Кроме того, в будущем, когда вы cp
находясь в каталоге, имя которого происходит от какой-либо другой команды, используйте -t
вариант, чтобы убедиться, что это действительно каталог:
find folder -type d -exec cp -t {} file.txt \;
От man cp
:
-t, --target-directory=DIRECTORY
copy all SOURCE arguments into DIRECTORY
Таким образом, если файл предоставляется в качестве аргумента -t
, cp
будет автоматически жаловаться.
Другой ответ на этот вопрос использует -type d
,