複数のディレクトリ名から文字を削除しようとしていますが、これにループを設定する方法がわかりません。
Part to remove is '1' (the last digit in the directory name)
e.g. S123451/
S234561/
S345671/
また、サブフォルダー内の複数のファイルからファイル名の一部を削除しようとしていますが、そのループを設定する方法がわかりません。
Part to remove '_*_*_*****' (everything after the 1st underscore up to before the file extension)
e.g S123451/
/9/
S12345_1_9_00001.nii.gz
/4/
S12345_1_4_00001.nii.gz
S12345_1_4_00001.bval
S12345_1_4_00001.bvec
S234561/
/2/
S23456_1_2_00001.nii.gz
/1/
S23456_1_1_00001.nii.gz
S23456_1_1_00001.bval
S23456_1_1_00001.bvec
S345671/
/5/
S34567_1_5_00001.nii.gz
/20/
S34567_1_20_00001.nii.gz
S34567_1_20_00001.bval
S34567_1_20_00001.bvec
答え1
Larry Wall rename
(Debian/ubuntu) またはprename
(Fedora/RHEL/CentOS) の場合:
目次:
rename -n 's/.$//' *
つまり、最後の文字をnullに置き換えます。-n
テスト実行に使用され、削除または-v
実際の実行に置き換えられます。*/
ディレクトリのみが表示されるようにこのモードを使用する場合:
rename -n 's:./$::' */
文書:
rename -n 's/_[^.]+//' *
つまり、最初のアンダースコアとその後のすべての項目をドット以外の文字に置き換えます。