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
使用re
とpathlib
モジュール。
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-
フィールドを印刷します。