Я нашел этот ответ Ask Ubuntu и изменил его на:
newdir=$(printf "%04d")
find . -maxdepth 1 -type f -name '*.mp3' -print0 | \
sort -z | while IFS= read -d '' -r file; do \
mkdir -p "$newdir" && mv "$file" "$newdir" ;
((newdir++));
done
Он работает, но только первая папка получает ведущие нули. Я хочу, чтобы все папки были пронумерованы четырехзначным числом.
Файлы должны быть перемещены в папки в том же порядке, что и в пункте -ls l
, или показаны здесь в следующем примере:
001_003.mp3
001_007.mp3
001_021.mp3
001_035.mp3
002_010.mp3
002_013.mp3
002_029.mp3
Для этого я добавил опцию -z
в sort
команда (как в оригинальном коде по ссылке выше).
Любая помощь будет оценена.
Принятие bash
n=0
find . -maxdepth 1 -type f -name '*.mp3' -print0 | \
sort -z | while IFS= read -d '' -r file; do \
printf -v newdir '%04d' $((n++));
mkdir -p "$newdir" && mv "$file" "$newdir/" ;
done
Если Вы используете оболочку, которая не поддерживает printf -v
, затем можно использовать замену команды как в исходной версии т.е. newdir=$( printf '%04d' $((n++)) )