Как изменить имена нескольких каталогов?

У меня есть некоторые каталоги, на имена которых я хочу изменить {00..16}.

$ ls
'FVSFT1092A'         'FVSFT1092I'
'FVSFT1092B'         'FVSFT1092J'
'FVSFT1092C'         'FVSFT1092K'
'FVSFT1092D'         'FVSFT1092L'
'FVSFT1092E'         'FVSFT1092M'
'FVSFT1092F'         'FVSFT1092N'
'FVSFT1092G'         'FVSFT1092O'
'FVSFT1092H'         'FVSFT1092P'

Есть ли какая-либо команда для этого случая?

2
задан 20 October 2019 в 21:50

1 ответ

Могут быть лучшие пути, но это - то, как я сделал бы это:

file-rename -n 's/.*/sprintf "%02d", ++our $i/e' FVSFT1092?

Если Ваша оболочка говорит Вам что file-rename команда не существует, устанавливает rename пакет.

Если бы Вы хотели заменить просто последние знаки, а не все в настоящих именах, то Вы могли использовать это вместо этого:

file-rename -n 's/.$/sprintf "%02d", ++our $i/e' FVSFT1092?

Как записано, те команды не переименовывают файлов. Когда будет пора переименовать их, удалите -n. Перед удалением -n, необходимо осмотреть вывод. Это должно показать то, к чему переименован каждый файл. Необходимо также удостовериться, что только файлы, которые Вы на самом деле хотите переименовать, и не другие файлы, перечислены. Для первой команды, показанной выше, это должно показать это:

rename(FVSFT1092A, 01)
rename(FVSFT1092B, 02)
rename(FVSFT1092C, 03)
rename(FVSFT1092D, 04)
rename(FVSFT1092E, 05)
rename(FVSFT1092F, 06)
rename(FVSFT1092G, 07)
rename(FVSFT1092H, 08)
rename(FVSFT1092I, 09)
rename(FVSFT1092J, 10)
rename(FVSFT1092K, 11)
rename(FVSFT1092L, 12)
rename(FVSFT1092M, 13)
rename(FVSFT1092N, 14)
rename(FVSFT1092O, 15)
rename(FVSFT1092P, 16)

Выполнение его без -n на самом деле переименовывает файлы. Необходимо в значительной степени всегда работать file-rename (и связанные команды prename и rename) с -n сначала сделать пробный прогон. Но в этом случае это еще более важно чем обычно, потому что в этом случае поведение команды может вести себя по-другому для различных настроек локали или если у Вас есть другие столь же именованные файлы, которые Вы не хотите переименовывать.


Путь, которые управляют работами, состоит в том, что оболочка расширяется FVSFT1092? в список всех файлов в текущем каталоге, имена которого FVSFT1092 сопровождаемый любым дополнительным символом. Этот список передается file-rename команда, которая изменяет имена соответственно (в первой команде, показанной выше) к выражению Perl:

s/.*/sprintf "%02d", ++our $i/e

Это переименовывает любое имя файла, переданное ему к самому низкому количеству, еще не используемому, начиная с 1, и форматы это как две цифры, даже если это - меньше чем 10. Поэтому это зависит от порядка, в котором предоставляются имена файлов, который в свою очередь зависит от того, какие файлы на самом деле существуют в текущем каталоге и что приказывает, чтобы оболочка развернула их в.

Это должно работать. В странных угловых случаях это не сделает то, что Вы хотите, и легко проверить на это путем выполнения команды с -n сначала (как показано выше), который необходимо сделать так или иначе для ловли любых ошибок.

Для получения общей информации о как синтаксис, принятый file-rename управляйте работами, я рекомендую Объемные файлы переименования в Ubuntu; самое краткое из введений в переименовать команду (Oli).

2
ответ дан 2 December 2019 в 03:26

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

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