Я на самом деле попробовал существующий ответ от: Как скопировать файл в несколько папок с помощью командной строки? где я использовал команду:
find folder -exec cp file.txt {} \;
Я хотел использовать это, потому что я хотел скопировать один файл под названием 'file.txt' к каталогу, названному 'папкой' и всеми ее подкаталогами, не упоминая все каталоги в команде.
Однако то, что это закончило тем, что делало, заменяло содержание каждого файла в 'папке' и ее подпапках с содержанием 'file.txt'. Например, если бы был 'foo.txt' в папке, то она все еще сохранила бы имя 'foo.txt', но все его содержание было бы заменено тем из 'file.txt'. Это озадачило меня, и я попробовал следующий интерактивный флаг:
find folder -exec cp -i file.txt {} \;
и я получил подсказки перезаписи для каждого файла в каталоге 'папка' и все ее подкаталоги, даже при том, что имена все отличались.
Кто-то может помочь мне выяснить то, что продолжается и какова соответствующая команда должна быть?
Вы должны ограничить 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
.