Если вы согласитесь на 100 файлов в каталоге вместо 200, мы можем сделать это в одной строке:
find . -maxdepth 1 -iname '[0-9][0-9][0-9][0-9][0-9].png' | sed 's/^\(.*\)\([0-9][0-9][0-9]\)\([0-9][0-9]\)\(.*\)$/mkdir -p \1\200 ; mv \1\2\3\4 \1\200\/\2\3\4/' | bash
Вот что он делает:
- Найти: Находит все файлы (5 цифр) .png, только в указанном каталоге.
- Sed: выполняет поиск / замену на выходе Find.
- Находит: последовательность из 3 цифр, затем 2 цифры.Запомните обе группы цифр и весь текст до и после него в строке.Текст перед цифрами будет путем, текст после него будет расширением.
- Замените двумя командами
- mkdir -p (путь) (первые 3 цифры) 00
- mv (весь исходный путь) (путь) (первые 3 цифры) 00 / (первые 3 цифры) (последние 2 цифры) (расширение)
- И передайте все это Bash, чтобы он действительно его запустил.
Если вы хотите проверить это, введите команду, но замените | bash
на > file
.Все команды, которые будут выполнены, будут в файле.Если хотите, сделайте его исполняемым и запустите его там.Или удалите | bash
и он выведет на экран.
Мой тест: touch 00000.png 00010.png 01010.png
Результат:
mkdir -p ./00000 ; mv ./00010.png ./00000/00010.png
mkdir -p ./00000 ; mv ./00000.png ./00000/00000.png
mkdir -p ./01000 ; mv ./01010.png ./01000/01010.png