フォルダ内のファイルの名前を変更すると、ワイルドカード文字は名前の変更には適用されません。

フォルダ内のファイルの名前を変更すると、ワイルドカード文字は名前の変更には適用されません。

フォルダには一連のファイルがあり、ファイル名の途中に_S_S1、、S2....)で始まる文字列があり、アンダースコアで削除/交換する必要があります。S143このように

file1_S1_R1 
file2_S2_R1 
file3_S95_R1
file4_S143_R1

すべき

file1_R1 
file2_R1 
file3_R1
file4_R1

私は標準を試しました

rename 's/_S*_/_/g' *

注文する。しかし、何も起こりませんでした。私のコンピュータでは、名前の変更にワイルドカードが機能しないようです。バックスラッシュ__とにかく予約された文字ではない)を使用してエスケープしたり、これらのトリックに違いはありません。私は何が間違っていましたか?

ベストアンサー1

renameあなたのユーティリティがPerlユーティリティであると仮定しますrename(最初の引数としてPerl式、通常は代替式を使用します):

$ ls -l
total 0
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file1_S1_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file2_S2_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file3_S95_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file4_S143_R1
$ rename 's/_S\d*_/_/g' *
$ ls -l
total 0
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file1_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file2_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file3_R1
-rw-r--r--  1 kk  wheel  0 Oct  4 11:00 file4_R1

Perl正規表現の代わりにファイル名globbingパターンを使用して正規表現エラーが発生すると仮定できます。S*(0個以上のS文字一致)をS\d*S次に0個以上の数値一致)に変更して問題を解決しました。

おすすめ記事