Любое решение, включающее расширение *.mp3
, рискует потерпеть неудачу, если число файлов .mp3 настолько велико, что результирующее расширение *.mp3
превышает ограничение оболочки. Решения, прежде всего, имеют эту проблему:
ls *.mp3 | ...
for file in *.mp3; do ...
На самом деле, хотя ls *.mp3|xargs ...
- хорошее начало, но у него та же проблема, потому что требуется, чтобы оболочка раскрыла список *.mp3
и использовала этот список в качестве аргументов командной строки для команды ls
.
Один из способов правильно обработать произвольное количество файлов:
find . -maxdepth 1 -iname '*.mp3'|while read f; do
do_something_one_file_at_a_time.sh "$f"
done
OR:
find . -maxdepth 1 -iname '*.mp3' -print0|xargs -0 do_something.sh
(Оба варианта имеют побочную выгоду от правильной обработки имен файлов с пробелами, например, «Капли дождя падают на мою голову.mp3».
Обратите внимание, что в do_something.sh вам нужно сделать for file in "$@"; do ...
, а не просто for file in $*;do ...
или for file in $@; do ...
.
Также обратите внимание, что решение amit_g ломается, если есть имена файлов с пробелами.)