С помощью GNU Parallel это выглядит так:
find ${FOLDER} -iname "*${SOME_STRING}*" |
parallel cp {} '{= s/ABC/XYZ/g =}'
Конструкция {= =} содержит выражение Perl, которое изменяет $_.
Одно из преимуществ заключается в том, что GNU Parallel делает то, что нужно, даже если у вас есть файлы с именами:
My brother's 12" records worth >100$.txt
или ужасы вроде:
touch Y-"$(perl -e 'print pack("c*",1..9,11..46,48..255)')"
{}
должен быть концом команды -exec
. Команда mv
поддерживает это с опцией -t
:
mv [OPTION]... -t DIRECTORY SOURCE...
Таким образом, ваша команда будет:
find ~ -iregex ".*cheat.*\.pdf" -exec mv -t cheatSheet "{}" +
При использовании -exec... {} +
{}
должен быть в конце, непосредственно перед +
.
Это означает, что вам придется использовать
-exec mv -t cheatSheet {} +
для чего потребуется доступ к GNU mv
. Без GNU mv
вы бы использовали
-exec mv {} cheatSheat \;
для перемещения по одному файлу или
-exec sh -c 'mv "$@" cheatSheet' sh {} +
для вызова внутристрочного скрипта -, который перемещает все файлы за один раз.
Вам также не нужно -iregex
. Следующее будет легче читать и понимать:
find "$HOME" -ipath '*cheat*.pdf' \
-exec sh -c 'mv "$@" cheatSheet' sh {} +
или, для ясности, одно из следующего, которое делает то, что вы на самом деле имеете в виду (это зависит от того, хотите ли вы, чтобы cheat
было частью имени файла в конце пути (первый вариант )или одно из имен каталогов в пути (второй вариант)):
find "$HOME" -iname '*cheat*.pdf' \
-exec sh -c 'mv "$@" cheatSheet' sh {} +
find "$HOME" -ipath '*cheat*/*' -iname '*.pdf' \
-exec sh -c 'mv "$@" cheatSheet' sh {} +
Обратите внимание, что -ipath
является расширением GNU find
, но -iname
, хотя и не соответствует стандарту -, реализуется чаще.
Также стоит отметить, что если у вас есть конфликты имен, то есть файлы с одинаковыми именами, вы перезапишете некоторые уже перемещенные файлы в процессе перемещения других файлов. С помощью GNU mv
вы можете избежать этого, используя либо параметр -n
(не затирать существующие файлы ), либо параметр -b
(переименовывать/создавать резервные копии существующих файлов ).
Связанные: