Как каждый правильно копирует файл в несколько папок и подпапок, не перезаписывая содержание файла в папках назначения?

Я на самом деле попробовал существующий ответ от: Как скопировать файл в несколько папок с помощью командной строки? где я использовал команду:

find folder -exec cp file.txt {} \;

Я хотел использовать это, потому что я хотел скопировать один файл под названием 'file.txt' к каталогу, названному 'папкой' и всеми ее подкаталогами, не упоминая все каталоги в команде.

Однако то, что это закончило тем, что делало, заменяло содержание каждого файла в 'папке' и ее подпапках с содержанием 'file.txt'. Например, если бы был 'foo.txt' в папке, то она все еще сохранила бы имя 'foo.txt', но все его содержание было бы заменено тем из 'file.txt'. Это озадачило меня, и я попробовал следующий интерактивный флаг:

find folder -exec cp -i file.txt {} \;

и я получил подсказки перезаписи для каждого файла в каталоге 'папка' и все ее подкаталоги, даже при том, что имена все отличались.

Кто-то может помочь мне выяснить то, что продолжается и какова соответствующая команда должна быть?

1
задан 13 April 2017 в 15:23

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.

1
ответ дан 7 December 2019 в 16:00

Другие вопросы по тегам:

Похожие вопросы: