Я хотел бы использовать команду find с действием -exec со знаком плюс (+) (для эффективности) или с xargs для копирования файлов из одного каталога в другой. Следующий ответ не помог мне. Я под версией bash: 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 может разбивать имена файлов на пробелы, поэтому ./file1 - foo.txt будет отображаться как ./file1, - и foo.txt командой cp.
Я ожидаю, что это сработает:
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 может разбивать имена файлов на пробелы, поэтому ./file1 - foo.txt будет отображаться как ./file1, - и foo.txt командой cp.
Я ожидаю, что это сработает:
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 может разбивать имена файлов на пробелы, поэтому ./file1 - foo.txt будет отображаться как ./file1, - и foo.txt командой cp.