web-dev-qa-db-ja.com

ワイルドカードを使用して大量の名前を変更しますか?

たくさんのファイルにオフバイワンの名前を付けたので、「1」で始まるファイルの名前を2以外の同じファイル名に変更したいと思いました。

たとえば、mv 1.4.5.txt 2.4.5.txtまたはmv 1-chart.jpg 2-chart.jpgなど。

mv 1* 2*を試しましたが、2*をディレクトリとして解釈するため、これは受け入れられませんでした。

4
AJJ

ワイルドカードはそれを行いません。 echo mv 1* 2*の結果を見てください。より良い方法は(man rename)です:

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

mmvをインストールすると(引用符で囲む必要があります-シェルではなくmmv自体によって解釈されるように)、置換ワイルドカードの形式は#n nを再置換する番目 パターンのワイルドカード:

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
steeldriver