Почему не работает мой трубопровод?

Я пытаюсь создать bash-скрипт, который найдет все mp3-файлы в моей папке «Downloads» и переместит их в музыкальную папку. Почему эта линия не работает?

find ./ -type f -name \*.mp3 | mv *.mp3 /home/mitch/Desktop/Music/$ARTIST

Я пытался использовать конвейер, чтобы преобразовать информацию из первой команды во вторую, но я никогда раньше не использовал конвейер и не знаю, Я делаю это неправильно или если я неправильно понимаю, для чего они используются.

2
задан 1 March 2012 в 10:49

2 ответа

Команда mv не использует свой стандартный ввод, поэтому вам нужно преобразовать стандартный ввод в параметр, и для этого можно использовать xargs:

find ./ -type f -name '*.mp3' | xargs mv -t /home/mitch/Desktop/Music/$ARTIST

Также вы можете напрямую использовать действие -exec из find:

find ./ -type f -name '*.mp3' -exec mv {} /home/mitch/Desktop/Music/$ARTIST ';'

Редактировать

Как указано @geirha, первая команда не будет работать, если у вас есть имена файлов, содержащие пространства. В таком случае это должно быть следующим

find ./ -type f -name '*.mp3' -print0 | xargs -0 mv -t /home/mitch/Desktop/Music/$ARTIST
0
ответ дан 1 March 2012 в 10:49

Преимуществом xargs является расширение командной строки. Если у вас есть команда, которая возвращает очень большой объем текста (или много файлов по одной команде), вам понадобится xargs.

Если у вас есть несколько тысяч файлов в каталоге и вы хотите запустить какой-то скрипт в этом списке, вы можете попробовать «./myprogram *», но если ваша программа имеет какие-либо ограничения на размер параметра, вы можете создать буфер расширяется *. Кроме того, сама командная строка имеет ограничения, поэтому команда может завершиться сбоем из-за переполнения буфера командной строки. Использование xargs позволит избежать этой проблемы.

наконец, -print0 при поиске установит нулевые разделители для пробелов в возвращаемых именах файлов, а опция -0 в xargs будет интерпретировать эти нули. Прочитайте man xargs.

0
ответ дан 1 March 2012 в 10:49

Другие вопросы по тегам:

Похожие вопросы: