Переименование файлов в лексикографическом порядке с помощью числового шаблона, который последовательно увеличивается с фиксированным заполнением

У меня есть файлы, такие как

a bb ccc abc emrls 

Я хотел бы переименовать их так, чтобы после их сортировки (например, лексикографически) каждый файл получил следующее имя:

 00001 00002 00003 etc 

где # цифр для заполнения 0 задано априори, например, 6 в приведенном выше случае (при условии, что мы знаем, сколько цифр необходимо).

Поскольку мне очень нравится оболочка, это zsh , меня интересуют решения, которые извлекают выгоду из функций на zsh (возможно, используя zsh zmv ?). Меня также интересовали бы решения, совместимые с Bash.

2 Solutions collect form web for “Переименование файлов в лексикографическом порядке с помощью числового шаблона, который последовательно увеличивается с фиксированным заполнением”

Вы можете использовать флаг расширения l для ввода номера слева.

 i=0; for x in *; do ((++i)); mv -- $x new/${(l:6::0:)i}; done 

Существует относительно простой способ сделать это только с функциями POSIX: начните нумерацию на 1000001 (для 6 цифр) вместо 1 и отделите ведущую 1 . Он менее прост, но несколько символов короче.

 i=1000000; for x in *; do i=$((i+1)); mv -- "$x" new/${i#1}; done 

Если вы хотите воспользоваться zmv , вы можете использовать арифметическое выражение, которое увеличивает i внутри заменяющего текста.

 i=0; zmv '*' '${(l:6::0:)$((++i))}' i=1000000; zmv '*' '${$((++i))#1}' 

Добавьте квалификатор o glob, если вам нужно отсортировать файлы в другом порядке. С zmv вам нужно передать флаг -Q когда шаблон содержит квалификаторы glob.

Надеюсь, этот снимок поможет вам.

 [centos@centos new]$ touch a bb ccc dddd eee f gh i [centos@centos new]$ touch abc emrls cdg sf [centos@centos new]$ touch ABC A BB CCC DD GI KLM kmna kabc mas nas san fin zoo [centos@centos new]$ \ls -1 a A abc ABC bb BB ccc CCC cdg DD dddd eee emrls f fin gh GI i kabc KLM kmna mas nas san sf zoo [centos@centos new]$ a=0; for i in *; do a=$(($a+1)); b=`printf "%06d" $a`; mv -v ${i} ${b}; done `a' -> `000001' `A' -> `000002' `abc' -> `000003' `ABC' -> `000004' `bb' -> `000005' `BB' -> `000006' `ccc' -> `000007' `CCC' -> `000008' `cdg' -> `000009' `DD' -> `000010' `dddd' -> `000011' `eee' -> `000012' `emrls' -> `000013' `f' -> `000014' `fin' -> `000015' `gh' -> `000016' `GI' -> `000017' `i' -> `000018' `kabc' -> `000019' `KLM' -> `000020' `kmna' -> `000021' `mas' -> `000022' `nas' -> `000023' `san' -> `000024' `sf' -> `000025' `zoo' -> `000026' [centos@centos new]$ 
  • Эффективное извлечение данных из нескольких файлов в один файл CSV
  • Отменить завершение, но только завершение, в zsh
  • Ищете карту xinit / startx rabbithole
  • Zsh: расширение хэшированных имен каталогов в приглашении
  • Возможно ли возобновить источник .bashrc и .zshrc И удалить функции один раз внутри них без перезапуска?
  • Присвоение нового значения непосредственно в индекс символа значения в массиве с zsh
  • Как запустить указанный код с помощью getopts, когда параметры или аргументы не заданы?
  • Удалить keymap и полностью отключить ключ в zsh
  • Изменение динамического названия tmux-окна до последней строки вывода команды
  • Использование вложенного тройного выражения в командной строке .zshrc
  • принудительная загрузка функции завершения для zsh (без принудительного ее выполнения путем нажатия на вкладку)
  • Ошибка zsh не сбрасывается должным образом
  • Linux и Unix - лучшая ОС в мире.