Bashで無効な始まりと終わりの文字を含むファイル名を変更してバッチの名前を変更する

Bashで無効な始まりと終わりの文字を含むファイル名を変更してバッチの名前を変更する

(前)最初と最後の文字を削除して多くのファイルの名前を変更する必要があります.ext

エラー>

'1st moto ride [Aug '99]'.mp4
'Samuel' Song'.mp3
'Plane Landing'.avi
'"Ode" (sort of) to the Sun'.pdf
'The Divine Comedy [1308, Alighieri D.]'.txt
'100 ways to jump off the Moon'.wav
'[1979] Ста́лкер'.mkv

右>

1st moto ride [Aug '99].mp4
Samuel' Song.mp3
Plane Landing.avi
"Ode" (sort of) to the Sun.pdf
The Divine Comedy [1308, Alighieri D.].txt
100 ways to jump off the Moon.wav
[1979] Ста́лкер.mkv

ありがとう

ベストアンサー1

その一重引用符が説明できないlsアーティファクトではなく、実際にはファイル名の一部であるとします。

また、(p)rename(perlユーティリティ)がインストールされているとします。

ls
''\''1st moto ride [Aug '\''99]'\''.mp4'
rename "s/^'//;s/'\.(.*)$/.\$1/" *
ls
'1st moto ride [Aug '\''99].mp4'

この出力では、2番目の出力のファイル名の周りの一重引用符はls実際にlsアーティファクトです。

ツールと式の説明テキスト。

Perl正規表現を使用します。 for逆参照を除いて、構文はデフォルトでs///inと同じです。区切られている場合は、1行に複数の式を使用できます。sed$1;

つまり、先行を検索し'て何もないものに置き換えます。次に、'前のaリテラルを検索し.、aの後ろのすべての項目をキャプチャし..aとキャプチャされた部分に一致するすべての項目を置き換えます。

通常、私は一重引用符を使用してPerl REをラップしますが、一重引用符を置き換えようとしているので(そして非常に見苦しいエスケープを試みているので)二重引用符を使用しています。これは$1、交換部分からエスケープする必要があることを意味します。それ以外の場合は、欠落しているbash変数の空の文字列になります。

おすすめ記事