複数のファイルからディレクトリ名の最後の文字を削除する方法

複数のファイルからディレクトリ名の最後の文字を削除する方法

複数のディレクトリ名から文字を削除しようとしていますが、これにループを設定する方法がわかりません。

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/_[^.]+//' *

つまり、最初のアンダースコアとその後のすべての項目をドット以外の文字に置き換えます。

関連情報