Создавайте последовательно пронумерованные папки с начальными нулями и перемещайте в них файлы

Я нашел этот ответ 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 команда (как в оригинальном коде по ссылке выше).

Любая помощь будет оценена.

1
задан 13 September 2019 в 17:52

1 ответ

Принятие 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++)) )

1
ответ дан 7 December 2019 в 14:58

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

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