アンダースコアの前のすべての文字を保持しながら、ファイル名を繰り返し変更します。

アンダースコアの前のすべての文字を保持しながら、ファイル名を繰り返し変更します。

CentOS 7システムでは、何千ものファイル名を繰り返し変更する必要があります。現在の形式は次のとおりです。

(32-64 alphanumerics)_various special characters.wav

つまり、3レベルの深さのすべてのファイルから拡張子を繰り返し削除したいと思います_(注:すべての拡張子は次のようになります)。.wav.wav

例: 既存:

/home/user/recordings/TEST/december/157A757989F047C3AC2EC3499B4D04A5_7075276189 by [email protected] @ 8_44_52 AM.wav

/home/user/recordings/test/october/28D1E1840DE24D9DB4CF6D1A707533F6337C2DDE_2018690759 by [email protected] @ 1_26_55 PM.wav

期待する:

/home/user/recordings/TEST/december/157A757989F047C3AC2EC3499B4D04A5.wav

/home/user/recordings/test/october/28D1E1840DE24D9DB4CF6D1A707533F6337C2DDE.wav

私はたくさんの検索をし、ファイル名の他の部分を修正する多くの方法を見つけましたが、特定の文字(_)と拡張子の前のすべての内容を保持しませんでした。

助けてくれてありがとう。

ベストアンサー1

ディレクトリ部分、ファイル名、および前の文字を抽出する必要があります。最初アンダースコア(すべてのファイル.wavに対して別々の変数に拡張子を格納する必要はないため):

find /home/scott/ -maxdepth 4 -type f -name '*_*.wav' -exec sh -c 'h=${1%/*}
t=${1##*/}; echo mv "$1" "${h}/${t%%_*}".wav' doom {} \;

echo実際にファイル名を変更するには削除してください。

おすすめ記事