web-dev-qa-db-ja.com

ファイル名の切り捨て

ファイル名を最後の4桁まで切り捨てようとしています(例:941_S_5193が5193になります)。このコマンドをループして約600個のファイルに適用する最も簡単な方法は何ですか?

ありがとうございました。 -KM

1
klmpc

renameコマンドは、これを十分に実行できます。

# Note, -n flag used for testing only, remove for actual renaming
$ ls
941_P_5191  941_P_5192  941_P_5193  941_P_5194
$ rename -n 's/^(.*)_([0-9]{4})$/$2/'  ./*
./941_P_5191 renamed as 5191
./941_P_5192 renamed as 5192
./941_P_5193 renamed as 5193
./941_P_5194 renamed as 5194

forループ内でbashとmvのプレフィックス削除を行うこともできます。

$ for f in ./*; do echo mv "$f" "${f##*_}"; done
mv ./941_P_5191 5191
mv ./941_P_5192 5192
mv ./941_P_5193 5193
mv ./941_P_5194 5194

注:実際の名前変更を行うには、echoを削除してください

2

941_S_5193を1つのファイル名として指定しましたが、さらに役立つものはほとんどありません。私は941_S_5193と呼ばれるサンプルファイルを使用してこのfindコマンドを実行しました。

find /users/desktop/km/neuroimage/struct/ -type f -iname '[[:digit:]]*_[[:alpha:]]_*' -exec rename -n 's/[[:digit:]]*_[[:alpha:]]_//' {} \;

サンプルファイル名:

941_S_5194
923_D_5234
941_S_5193
941_S_5134
941_A_0034
941_C_9034

このコマンドの使用:

find /users/desktop/km/neuroimage/struct/ -type f -iname  '[[:digit:]]*_[[:alpha:]]_*' -exec rename -n 's/[[:digit:]]*_[[:alpha:]]_//' {} \;

ファイル名に次の変更を加えます。

rename(./941_S_5194, ./5194)
rename(./923_D_5234, ./5234)
rename(./941_S_5193, ./5193)
rename(./941_S_5134, ./5134)
rename(./941_A_0034, ./0034)
rename(./941_C_9034, ./9034)

結果:

0034
5134
5193
5194
5234
9034

注:名前変更コマンドで「-n」オプションを使用すると、実際に名前を変更する前に、名前が変更されたものを確認できます。これらのファイルの名前を変更する準備ができたら、そのオプションを削除します。

コマンドを完全に評価する手順は次のとおりです。

  1. 最初にこのfind /users/desktop/km/neuroimage/struct/ -type f -iname '[[:digit:]]*_[[:alpha:]]_*'を使用して、変更されるファイルを見つけます。
  2. ステップ(1)が失敗した場合、regexはファイル名と一致しません。正規表現を微調整し、質問を更新します。
  3. 期待どおりに起動したら、ステップ(1)で-exec rename -n 's/[[:digit:]]*_[[:alpha:]]_//' {} \;部分をコマンドに追加し、名前が変更されたものを見つけて表示します。

    find /users/desktop/km/neuroimage/struct/ -type f -iname '[[:digit:]]*_[[:alpha:]]_*' -exec rename -n 's/[[:digit:]]*_[[:alpha:]]_//' {} \;

  4. 完了したら、-nオプションを削除して、これらのファイルの名前を実際に変更します。そのようです:

    • find /users/desktop/km/neuroimage/struct/ -type f -iname '[[:digit:]]*_[[:alpha:]]_*' -exec rename -n 's/[[:digit:]]*_[[:alpha:]]_//' {} \;
0
George Udosen

ls | tail -c 5を使用してディレクトリ内のアイテムをループ処理し、各ファイルの最後の4桁をリストすることをお勧めします。

0
Ross