Я старался
$ find Music -exec cp -v {} \>/dev/null \;
Получил ошибку
'Music/AlbumArtSmall.jpg' -> '>/dev/null'
cp: cannot create regular file '>/dev/null': No such file or directory
Я старался
$ find Music -exec echo {} && echo cp {} \>/dev/null \;
find: missing argument to `-exec'
А также
$ find Music -exec echo {} \\; echo cp {} \>/dev/null \;
find: missing argument to `-exec'
А также
$ find Music -exec echo {} \&\& cp {} \>/dev/null \;
Music && cp Music >/dev/null
...
Я старался
$ find Music -exec bash -c 'echo "{}" && echo cp \"{}\" /dev/null' \;
Music/4-Mat - Intro Music.mp3
cp "Music/4-Mat - Intro Music.mp3" /dev/null
Похоже, это будет работать, но это дало
$ find Music -exec bash -c 'echo "{}" && cp \"{}\" /dev/null' \;
Music/4-Mat - Intro Music.mp3
cp: target '/dev/null' is not a directory
Когда я взял второй эхо.
Вот похожий, но не тот же вопрос: find с exec: как выполнить многоступенчатое условное действие для каждого файла
cat
:cat {} >/dev/null
, Вы также можете использоватьdd
:dd if={} of=/dev/null
,Ответы:
Вы, кажется, обошли дома, не получив правильную комбинацию:
Вам нужно как минимум два параметра для
cp
, источник (ы) и одна цель, которая может быть файлом или каталогом. Когда ты убегаешь>
вы удаляете его свойства перенаправления, так>/dev/null
затем становится целью, ища подкаталог в текущем каталоге.Обратите внимание, что вы не можете указать отдельные перенаправления с
-exec
опция: параметры передаются непосредственно в запланированную программу без дальнейшей интерпретации оболочки.Для себя я вообще предпочитаю эту конструкцию
-exec
:Затем я могу использовать все обычные команды оболочки в
while
предложение, включая несколько команд, перенаправления и т. д.Обратите внимание, что определенные символы в именах файлов (например, внедренные новые строки или начальные и конечные пробелы) будут препятствовать работе этого решения, пока оригинал
-exec
Ответ должен работать для всех имен файлов. У меня нет таких имен файлов, отсюда и мои предпочтения.источник
find … | while read …
потерпит неудачу, если есть новая строка в имени файла (-exec
лучше); (2) если где-то есть пустой именованный канал,cp
будет глохнуть, пока труба не будет записана (find -type f …
помог бы). Я все еще думаю, что это хороший ответ (+1 между прочим), однако хорошо знать возможные подводные камни. Этот комментарий должен указать на некоторые из них.while read -r; do cp -v "$REPLY" /dev/null; done
- Я использую это при создании сценариев, но не в специальных командах. Я не хотел усложнять ответ, рассматривая такие крайние случаи.