
数値文字列をそのままにしながら、ファイル名にスペースを含む多くのファイルの名前を変更したいと思います。すべてのファイルに対して数字が連続しているわけではなく、数字の前後の文字列は同じではありません。数字の前の文字列がすべてのファイルに対して同じであることを望みます。
たとえば、
100 foo_1.ext
200 foo_2.ext
201 foo_3.ext
次に名前を変更する
100.ext
200.ext
201.ext
答え1
あなたは試すことができます:
for a in *.ext; do mv "$a" "${a/ */}.ext"; done
説明する:
for a in *.ext
.ext
- 現在のディレクトリにある拡張子を持つすべてのファイルをインポートします。
a/ */
- 部分文字列を何もないものに置き換えます( ${string/substring/replacement} )。この構文は、空白(含む)の後にあるすべてのシンボルを取得して削除します。
。
またはあなたが持っているなら拡張子が異なるファイルディレクトリ内のすべてのファイルを処理する必要がある場合は、以下を試してください。
for a in *; do mv "$a" "${a/ *\./\.}"; done
Perlの名前変更コマンドと同等のものは次のとおりです。
prename 's/ .*\./\./' *
はい: ドキュメント
100 foo_1.ext
200 foo_1.ext
201 foo_3.ext
3401 txt_3.txt
次に、名前が変更されます。
100.ext
200.ext
201.ext
3401.txt
名前にスペースが含まれていないファイルは処理されません。
答え2
これに使用されますprename
。
prename 's/\D*(\d*).*/$1.ext/' *.ext
これは、指定されたすべてのファイルに対して、\D*\d*.*
拡張正規表現(数字ではなく複数の後に複数の数字と残りの名前が続くもの)を含む部分()
(数字や拡張子など)に置き換えます。
質問を編集した後、ファイル名は数字で始まり、その後にスペースが続くように見えます。これにより、状況がさらに単純化されます。
prename 's/ .*/.ext/' *.ext
答え3
Perlの名前変更(Linuxの名前変更ではない)を使用できます。
prename -n 's/(\d*)\s*foo_\d*/$1/g' /path/to/folder/*.ext
または
prename -n 's/(\d*)\s*.*_\d*/$1/g' /path/to/folder/*.ext
サンプルファイル名:
100 foo_2.ext
101 foo_1.ext
200 foo_234.ext
302 foo_2.ext
結果:
100.ext
101.ext
200.ext
302.ext
情報:
(\d)\sfoo_\d
または(\d)\s.*_\d
: ファイル名と一致(\d)
:前の番号を返します。$1
:戻り値変数2
-n
prename
:コマンド結果を表示するために使用され、変更するには削除してください。
望むより:man prename