Поиск и копирование файлов
Почему следующее не копирует файлы в папку назначения?
# 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
Благодаря