重命名具有特定扩展名的目录

重命名具有特定扩展名的目录

我问的上一个问题的扩展: 重命名字母数字文件

我有一个目录,其中包含扩展名为 *_upstream 的子目录:

DHX30_vs_Control18.txt_events_without_u2af1_srsf2_altexons_upstream
GEMIN5_vs_Control19.txt_events_without_u2af1_srsf2_altexons_upstream

我想通过删除第一个“_”之后的所有内容来重命名它们,这样它就变成了类似的东西

DHX30
GEMIN5

答案1

for dir in ./*_*_upstream/
do 
  mv -- "$dir" "${dir%%_*}"
done

上面的循环选取当前目录中与模式匹配的每个目录(尾部斜杠执行此操作):“(某物)下划线(某物)下划线上游”。然后,它通过使用参数扩展来重命名这些目录,以删除最长的匹配:“下划线(任何内容)”,这会删除第一个下划线及其之后的所有内容。

例如:

设置:

mkdir DHX30_foo_upstream
mkdir GEMIN5_vs_Cblah_upstream
touch DX31_foo_upstream

结果:

$ tree
.
├── DHX30
├── DX31_foo_upstream
└── GEMIN5

2 directories, 1 file

答案2

如果在 Linux 上:

rename -v 's/_.*//' *_upstream/

相关内容