Я понял, что назвал кучу файлов поодиночке, поэтому я хотел переименовать любой файл, начинающийся с «1», на то же самое, кроме начинающегося с 2.
Например mv 1.4.5.txt 2.4.5.txt
или mv 1-chart.jpg 2-chart.jpg
и т. Д.
Я пробовал mv 1 * 2 *
, но это не было принято, потому что оно интерпретирует 2 *
как каталог.
Подстановочные знаки этого не сделают. Посмотрите на результат echo mv 1 * 2 *
. Лучше всего ( man rename
):
rename 's/^1/2/' 1*
Вы можете использовать подстановочные знаки таким образом, если вы установите 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
позволяет вам выполнить пробный запуск - удалить его, чтобы фактически переименовать файлы.)