Как скопировать файлы с папки с помощью находки, управляют с - исполнительное действие, или с xargs, к другой папке

Я хотел бы использовать команду находки с - исполнительное действие с плюс (+) знак (для эффективности), или с xargs для копирования файлов от одного каталога до другого. Следующий ответ не работал на меня. Я нахожусь под версией удара: 4.3.48 (1). Попытка:

find . \( \( -type f -size -2M \) -o \( -type f -size 2M \) \) -exec cp '{}' ~/Pictures/test_folder '+'

или:

find . \( -type f -size -2M \) -o \( -type f -size 2M \) | xargs cp -t ~/Pictures/test_folder 

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

0
задан 7 November 2017 в 21:44

1 ответ

Я ожидал бы, что это будет работать:

find . -type f \( -size -2M -o -size 2M \) -exec cp -t ~/Pictures/test_folder {} +

(Я вынул общее -type f тест.)

С +, {} как ожидают, будет последним объектом в -exec команда. От GNU находят руководство:

Только один {} позволяется в рамках команды, и это должно появиться в конце, сразу перед +. A + появление в любом положении кроме сразу после {} не считается особенным (то есть, это не завершает команду).

Если Вы используете find и xargs, не забудьте использовать -print0 и -0 опции:

find ... -print0 | xargs -0 cp -t ...

С -print0, имена файлов разграничены с символом ASCII NUL, единственный, не позволенный в путях. Без этого, xargs мог разделить имена файлов на пробелах, таким образом, a ./file1 - foo.txt был бы замечен как ./file1, - и foo.txt cp команда.

3
ответ дан 1 November 2019 в 06:24

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

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