如何从多个文件中删除目录名的最后一个字符

如何从多个文件中删除目录名的最后一个字符

我正在尝试从多个目录名称中删除一个字符,但我不确定如何为此设置循环。

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/.$//' *

换句话说,将最后一个字符替换为空。-n用于空运行,删除或替换-v为实际执行。如果您使用该*/模式来确保仅列出目录:

rename -n 's:./$::' */

文件:

rename -n 's/_[^.]+//' *

换句话说,将第一个下划线及其后面的所有内容替换为非点。

相关内容