web-dev-qa-db-fra.com

Utiliser des jokers pour renommer en masse?

J'ai réalisé que j'avais nommé un groupe de fichiers de manière différente, alors je voulais renommer n'importe quel fichier commençant par "1" par la même chose, à l'exception de 2.

Par exemple, mv 1.4.5.txt 2.4.5.txt ou mv 1-chart.jpg 2-chart.jpg etc.

J'ai essayé mv 1* 2* mais cela n'a pas été accepté car il interprète 2* comme un répertoire.

4
AJJ

Les wildcards ne le feront pas. Regardez le résultat de echo mv 1* 2*. Une meilleure façon est (man rename):

rename 's/^1/2/' 1*
6
waltinator

Vous pouvez utiliser des caractères génériques de cette manière si vous installez mmv (bien qu'ils doivent être cités - de sorte qu'ils soient interprétés par mmv lui-même plutôt que par le shell), et le caractère générique de remplacement prend la forme #n pour remplacer le nth joker du motif:

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.

Donc par exemple

$ 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

(L'option -n vous permet d'effectuer un essai à blanc - supprimez-le pour renommer les fichiers.)

2
steeldriver