任意の数字を削除して複数のファイルの名前を変更します。

任意の数字を削除して複数のファイルの名前を変更します。

私はUbuntuを使用しており、ファイルがたくさんあります。ファイルには2つのタイプがあります。

"img_00000_c0_1283347740957299us.jpg" 
"img_00000_c1_1283347740342342us.jpg"

c0 または c1 で区切られます。ファイル番号が増えるほど、「00000」の場所の番号も増えます。たとえば、c0を入力すると、5番目のファイルの名前は "img_00005_c0_1283347740957299us.jpg". 問題は、"c0_"または"c1_"の後の長い数字が私にとって意味がなく、ランダムな数字であることです。常に"1283347740957299us"ではありません。したがって、このファイルの名前を変更したいと思います。のみ削除してください。

img_00005_c1_1283347740957299us.jpg ---> img_00005_c1.jpg

私はオンラインでいくつかの答えを試しました。たとえば、この答えです。

for FILE in eventDataLog.txt.2015*; do mv "$FILE" "abc-$FILE"; done

上記のコードは次のようになります。この回答役に立つでしょうが、私の場合、名前を変更することは文字を追加するものではありません。名前部分減算に対する回答も見つかりました。ここしかし、私の場合はランダムな数です。

よろしくお願いします!

ベストアンサー1

いくつかのオプションがあり、すべて_名前の末尾から最短のサフィックスを削除します。

  1. Perlベースのprenameコマンドの使用

    $ prename -nv -- 's/_[^_]*\.jpg/.jpg/' *.jpg
    img_00000_c0_1283347740957299us.jpg renamed as img_00000_c0.jpg
    img_00000_c1_1283347740342342us.jpg renamed as img_00000_c1.jpg
    

n(出力が満足な場合は、このオプションを削除してください)

  1. シェルパラメータ拡張の使用

    $ for f in img_*.jpg; do echo mv -- "$f" "${f%_*}.jpg"; done
    mv -- img_00000_c0_1283347740957299us.jpg img_00000_c0.jpg
    mv -- img_00000_c1_1283347740342342us.jpg img_00000_c1.jpg
    

echo(出力が満足な場合は削除してください)。

パターンをより具体的に一致させるには(たとえば、1つ以上の10進数シーケンスの後にus)、これを行うことができますが、提供された情報によると、これは必要ないようです。

おすすめ記事