Подтвердить что ты не робот

Как передать результаты поиска на mv в Linux

Как мне передать результаты поиска (в Linux) для перемещения в другой каталог? Это то, что я до сих пор.

find ./ -name '*article*' | mv ../backup 

но он еще не совсем прав (я получаю сообщение об ошибке, отсутствующее в файле, потому что я не указывал файл, потому что пытался его получить из канала)

4b9b3361

Ответ 1

find ./ -name '*article*' -exec mv {}  ../backup  \;

ИЛИ

find ./ -name '*article*' | xargs -I '{}' mv {} ../backup

Ответ 2

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 его.

Ответ 3

Для OSX (10.11.5) команда find поддерживает -exec, что означает, что это может быть выполнено с помощью одной команды, и нет необходимости в канале.

exec выполнит команду для каждого найденного совпадения. Вхождение {} внутри команды будет заменено на имя пути. Для завершения команды точка с запятой помещается внутри кавычек ';'

find ./ -name '*article*' -exec mv {} ../backup ';'