Я хотел бы использовать команду находки с - исполнительное действие с плюс (+) знак (для эффективности), или с 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
не работает на меня. Возможно, я совершил синтаксическую ошибку некоторого вида, но я уже попробовал несколько изменений вышеупомянутых команд, и я все еще не могу заставить его работать. Тестовая папка является местоположением, где я хотел бы, чтобы файлы были скопированы в.
Я ожидал бы, что это будет работать:
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
команда.