ファイル名に含まれる重複部分文字列を削除してファイル名を変更する

ファイル名に含まれる重複部分文字列を削除してファイル名を変更する

次のパターンを使用して複数のファイルの名前を変更する必要があります。

sub-2795479_ses-V1_task-rest_acq-REST1_dir-AP_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_bold.json

到着


sub-2795479_ses-V1_task-rest_acq-REST1_dir-AP_run-01_bold.json

run-01_各ファイル名には、4つの可能性(またはrun-02_、、、run-03_run-04のいずれかの種類のサブストリングのみが含まれています。

部分文字列は、指定されたrun-0[1-4]_ ファイルでランダムに複数回繰り返すことができます。

私は心を失い、私が見つけることができる最も近いものスタックオーバーフローに関するこの質問。しかし、文字列操作に関する私の限られた知識に基づいて、より多くの助けが欲しい!

ベストアンサー1

またはパール:

$ f=sub-2795479_ses-V1_task-rest_acq-REST1_dir-AP_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_bold.json
$ g=$(perl -pe 's/(_run-0[1-4])\1+/$1/' <<< "$f")
$ echo "$g"
sub-2795479_ses-V1_task-rest_acq-REST1_dir-AP_run-01_bold.json

Perlスタイルのrename(1)プログラムを使用してください:

$ touch "$f"
$ ls sub*json
sub-2795479_ses-V1_task-rest_acq-REST1_dir-AP_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_run-01_bold.json
$ rename 's/(_run-0[1-4])\1+/$1/' sub*json
$ ls sub*json
sub-2795479_ses-V1_task-rest_acq-REST1_dir-AP_run-01_bold.json

おすすめ記事