参考: Linux でファイル名を変更すると、「裸語は許可されません」という問題が発生する
Linux で名前を変更する 2 つの方法
Linux ではファイルの名前を変更するコマンドが 2 つあります: mv
、rename
。
mv
注文
mv
コマンドに
mv /dir/file1 /dir2/file1
は 2 つのパラメータがあり、1 つ目はソース ファイル、2 つ目は宛先です。2 つ目のパラメータのファイル名が異なる場合は、名前が変更されます。2 つのパラメータにディレクトリが含まれておらず、ファイル名のみが含まれている場合は、名前変更: これは単一ファイルの名前変更です。
rename
注文
rename
このコマンド
rename arg1 arg2 arg3
rename
は、実際のバッチ名前変更コマンドです。パラメータは 2 つではなく 3 つあります。
arg1
: 古い文字列
arg2
: 新しい文字列: 名前を変更するファイルに一致させるには、3 つのワイルドカード、 、、
arg3
を使用できます。*
?
[char]
*
任意の数の文字を示し、
?
単一の文字を表し、カスタマイズされた単一の文字
[char]
に一致しchar
、任意の文字を入力できます。
たとえば、foo[a]*
で始まるファイル名のみが一致することを意味しますfooa
。ファイルが の場合foobcc.txt
、一致しません。 。
例
たとえば、以下の 2 つのファイルが/home
ありますabbcc.txt
。addbb.txt
a.txt
a
に置き換えたいのですxxx
が、コマンドは次のようになります。rename "a" "xxx" *.txt
次に、変更する必要があるファイルを最初に照合します。ここでは、.txt
サフィックスを持つすべてのファイルが照合されます。
に変更するとrename "a" "xxx" ?.txt
、1 つのファイルのみが一致します。つまり、 です。次に、a.txt
一致したファイル内のa
文字を に置き換えますxxx
。テストするときはabab.txt
、最初の文字のみが置き換えられることに注意してくださいa
。これについては後で理解する必要があります。
このコマンドは Linux のバージョンによって異なり、Debian シリーズのオペレーティング システムでは使用方法も異なることに注意してください。
Debian シリーズのオペレーティング システムのrename
使用
Ubuntu などの Debian シリーズのオペレーティング システムの場合、このコマンドをこのように使用するのは間違っており、次のようなエラーが報告されます。
(eval 1) 行 1 で「strict subs」が使用されている間は、ベアワード「a」は許可されません。
検索してみると、こんな記述を見つけました。
Debian ベースのディストリビューションでは、Perl 式とファイルのリストを受け取ります。使用する必要があります:
rename 's/foo/foox/' *
これはperl
式ですが、わかりやすく言うと、最初の 2 つのパラメータが 1 つに結合され、上記の 3 つのパラメータ形式ではなく、2 つのパラメータだけが必要になることを意味します。
例
現在のファイル名がabbcc.txt
,の場合ac.txt
、addbb.txt
したがって、上記の名前変更例を Ubuntu で実行すると、コマンドは次のようになります。
rename 's/a/xxx/' *.txt
結果は
xxxbbcc.txt
, xxxc.txt
,xxxddbb.txt
これら 3 つのファイルabbcc.txt
、ac.txt
、addbb.txt
文字を削除したい場合a
、コマンドはrename 's/a//' *.txt
(つまり、上記のコマンドを削除するだけですxxx
) となり、
結果は
bbcc.txt
、 、 となりますc.txt
。ddbb.txt
macOSの場合rename
まずbrew install rename
インストールrename
コマンドを使用します。残りの使い方はUbuntuと同じです。