Поиск и копирование файлов

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

# 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'

Ответ 1

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

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

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

Ответ 2

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

Фактически, двумя способами вы можете обрабатывать вывод команды find в команде copy

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

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

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

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

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

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

Во втором примере последняя часть i.e полуколонии также рассматривается как часть команды find, которая должна быть экранирована до нажатия кнопки ввода. В противном случае вы получите сообщение об ошибке

find: missing argument to `-exec'

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

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

Ответ 3

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

Ответ 4

for i in $(ls); do cp -r "$i" "$i"_dev; done;

Ответ 5

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