Ответ 1
find ./ -name '*article*' -exec mv {} ../backup \;
ИЛИ
find ./ -name '*article*' | xargs -I '{}' mv {} ../backup
Как мне передать результаты поиска (в Linux) для перемещения в другой каталог? Это то, что я до сих пор.
find ./ -name '*article*' | mv ../backup
но он еще не совсем прав (я получаю сообщение об ошибке, отсутствующее в файле, потому что я не указывал файл, потому что пытался его получить из канала)
find ./ -name '*article*' -exec mv {} ../backup \;
ИЛИ
find ./ -name '*article*' | xargs -I '{}' mv {} ../backup
xargs
обычно используется для этого, а mv
имеет параметр -t
, чтобы облегчить это.
find ./ -name '*article*' | xargs mv -t ../backup
Если ваш find
поддерживает -exec ... \+
, вы можете сделать это
find ./ -name '*article*' -exec mv -t ../backup {} \+
Опция -t
, вероятно, является расширением GNU. Конечно, можно катить свое, может быть, что-то вроде
find ./ -name '*article*' -exec sh -c 'mv "[email protected]" "$0"' ../backup {} \+
где мы бесстыдно злоупотребляем удобным фактом, что первый аргумент после sh -c 'commands'
заканчивается как параметр "script name" в $0
, так что нам даже не нужно shift
его.
Для OSX (10.11.5) команда find поддерживает -exec, что означает, что это может быть выполнено с помощью одной команды, и нет необходимости в канале.
exec выполнит команду для каждого найденного совпадения. Вхождение {} внутри команды будет заменено на имя пути. Для завершения команды точка с запятой помещается внутри кавычек ';'
find ./ -name '*article*' -exec mv {} ../backup ';'