ファイル名を並べ替えて削除する方法

ファイル名を並べ替えて削除する方法

cmd(Ubuntu)のファイル名から任意の数字を削除しようとしています。

私がしたいことは:

279796_3D AXL MPR_26438044_0001.dcm —> 279796_3D AXL MPR_0001.dcm

279796_3D AXL MPR_26438446_0011.dcm —> 279796_3D AXL MPR_0011.dcm

また、Pythonでこれを行う方法はありますか?

ファイル名の後にランダムな数字を並べ替えてから、すべて削除します。しかし、詰まっています。

答え1

Perlベースのファイル名の変更を使用する(Ubuntuパッケージからrename):

$ rename -n 's/_\d+_/_/' *.dcm
rename(279796_3D AXL MPR_26438044_0001.dcm, 279796_3D AXL MPR_0001.dcm)
rename(279796_3D AXL MPR_26438446_0011.dcm, 279796_3D AXL MPR_0011.dcm)

使用mmv:

$ mmv -n '*_*_*_*.dcm' '#1_#2_#4.dcm'
279796_3D AXL MPR_26438044_0001.dcm -> 279796_3D AXL MPR_0001.dcm
279796_3D AXL MPR_26438446_0011.dcm -> 279796_3D AXL MPR_0011.dcm

-nそれが正しいことをすることを確信したら、取り除きなさい。

bashシェルとKSHスタイルの拡張ワイルドカードを使用します。

$ shopt -s extglob

$ for f in *.dcm; do echo mv -n -- "$f" "${f/_+([0-9])_/_}"; done
mv -n -- 279796_3D AXL MPR_26438044_0001.dcm 279796_3D AXL MPR_0001.dcm
mv -n -- 279796_3D AXL MPR_26438446_0011.dcm 279796_3D AXL MPR_0011.dcm    

ここでecho正しいことをしていると確信している場合は、削除してください。

答え2

ファイル名を一括変更できますPython 3 使用repathlibモジュール。

python3 -c 'import re, pathlib
for f in pathlib.Path(".").glob("*.dcm"):
  f.rename(re.sub(r"_\d+(?=_)","",f.name))
'

答え3

電話するとcutトリックが行われます。

cut -d_ -f-2,4-

テストしてみてください:

echo "279796_MPR_26438044_0001.dcm" | cut -d_ -f-2,4-

これを使用して、複数のファイルの名前を次のように変更します。

for f in *.dcm; do mv "$f" "$(echo "$f" | cut -d_ -f-2,4-)"; done

cut_区切り記号()が表示されるたびに単語を分割し、最初-d _から2番目(-f-2)まで、4番目から最後()まで,-4-フィールドを印刷します。

関連情報