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

Яркость не может управляться с большой точностью. Боюсь, что вы застряли с этими уровнями яркости. Разумеется, попробуйте управлять яркостью с помощью этих команд терминала.

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

2 ответа

Команда mv не использует свой stdin, поэтому вам нужно перевести stdin в параметр, и для этого можно использовать 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 ';'

Edit

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

find ./ -type f -name '*.mp3' -print0 | xargs -0 mv -t /home/mitch/Desktop/Music/$ARTIST
5
ответ дан 25 May 2018 в 13:50
  • 1
    Привет большое спасибо. Первая по какой-то причине не работала, но вторая сделала. Я только начинаю этот материал, поэтому я не знаю, какие части вы добавили, но, надеюсь, я смогу это понять. – LurkDog 1 March 2012 в 12:57
  • 2
    @LurkDog, первый, с xargs, потерпит неудачу, если какой-либо из имен файлов содержит символы пробелов или кавычек, так что, вероятно, почему это не удалось для вас. Второй, используя find -exec вместо этого, на 100% безопасен в этом отношении. Независимо от того, какие символы содержат имена файлов, они передадут их на mv intact. – geirha 1 March 2012 в 14:26

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

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

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

0
ответ дан 25 May 2018 в 13:50

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

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