Найти и скопировать файлы - PullRequest
111 голосов
/ 09 марта 2011

Почему следующее не копирует файлы в папку назначения?

# find /home/shantanu/processed/ -name '*2011*.xml' -exec cp /home/shantanu/tosend {} \;

cp: omitting directory `/home/shantanu/tosend'
cp: omitting directory `/home/shantanu/tosend'
cp: omitting directory `/home/shantanu/tosend'

Ответы [ 5 ]

246 голосов
/ 09 марта 2011

Если вы намереваетесь скопировать найденные файлы в / home / shantanu / tosend, у вас есть порядок аргументов для cp:

find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend  \;

Примечание: команда find использует {} в качестве заполнителя для сопоставленного файла

29 голосов
/ 07 декабря 2013

я столкнулся с проблемой что-то вроде этого ...

На самом деле вы можете обработать вывод команды find в copy command

двумя способами.
  1. Если в выводе find команды нет пробела, т.е. если в имени файла нет пробела, вы можете использовать следующую команду:

    Синтаксис: find <Path> <Conditions> | xargs cp -t <copy file path>

    Пример: find -mtime -1 -type f | xargs cp -t inner/

  2. Но большую часть времени наши файлы производственных данных могут содержать в себе место. Поэтому в большинстве случаев нижеупомянутая команда безопаснее:

    Синтаксис: find <path> <condition> -exec cp '{}' <copy path> \;

    Пример find -mtime -1 -type f -exec cp '{}' inner/ \;

Во втором примере последняя часть, т. Е. Точка с запятой также рассматривается как часть команды find, которую следует экранировать перед нажатием кнопки ввода. В противном случае вы получите сообщение об ошибке, похожее на это

find: missing argument to `-exec'

В вашем случае, неправильный синтаксис команды копирования для копирования файла поиска в /home/shantanu/tosend. Будет работать следующая команда:

find /home/shantanu/processed/ -name '*2011*.xml' -exec cp  {} /home/shantanu/tosend \;
7 голосов
/ 09 марта 2011

Вам нужно использовать cp -t /home/shantanu/tosend, чтобы сказать, что аргумент является целевым каталогом, а не источником.Затем вы можете изменить его на -exec ... +, чтобы cp копировал как можно больше файлов одновременно.

0 голосов
/ 07 июля 2019
for i in $(ls); do cp -r "$i" "$i"_dev; done;
0 голосов
/ 08 декабря 2014

Причиной этой ошибки является то, что вы пытаетесь скопировать папку, для которой требуется опция -r, а также cp. Спасибо

...