Использование подстановочных знаков для массового переименования? [дубликат]

Я понял, что назвал кучу файлов поодиночке, поэтому я хотел переименовать любой файл, начинающийся с «1», на то же самое, кроме начинающегося с 2.

Например mv 1.4.5.txt 2.4.5.txt или mv 1-chart.jpg 2-chart.jpg и т. Д.

Я пробовал mv 1 * 2 * , но это не было принято, потому что оно интерпретирует 2 * как каталог.

5
задан 12 October 2017 в 16:29

2 ответа

Подстановочные знаки этого не сделают. Посмотрите на результат echo mv 1 * 2 * . Лучше всего ( man rename ):

rename 's/^1/2/' 1*
7
ответ дан 23 November 2019 в 08:58

Вы можете использовать подстановочные знаки таким образом, если вы установите mmv (хотя они должны быть в кавычках - так что они интерпретируются самим mmv , а не оболочкой), а подстановочный знак замены принимает форму #n для замены n th подстановочный знак из шаблона:

Usage: mmv [-m|x|r|c|o|a|l] [-h] [-d|p] [-g|t] [-v|n] [from to]

Use #[l|u]N in the ``to'' pattern to get the [lowercase|uppercase of the]
string matched by the N'th ``from'' pattern wildcard.

A ``from'' pattern containing wildcards should be quoted when given
on the command line. Also you may need to quote ``to'' pattern.

Use -- as the end of options.

Так, например,

$ mmv -n -- '1*' 2#1
1.sh -> 2.sh : delete old 2.sh? n
1-chart.jpg -> 2-chart.jpg
1.4.5.txt -> 2.4.5.txt
1.csv -> 2.csv

(Параметр -n позволяет вам выполнить пробный запуск - удалить его, чтобы фактически переименовать файлы.)

2
ответ дан 23 November 2019 в 08:58

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

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