0

我想根据目录名称的一部分重命名目录中的文件。我有以下结构:

Sample_1234/all_R2.gz
Sample_2345/all_R2.gz
Sample_3456/all_R2.gz

在每个目录中,我从多个其他文件的串联中创建一个新文件。然后,我想仅使用目录名称的数字部分来命名新的连接文件。例如,

Sample_1234/1234_R2.gz
Sample_2345/2345_R2.gz
Sample_3456/3456_R2.gz

我可以返回我想要的目录名称部分:

pwd | grep -o '[0-9][0-9][0-9][0-9]'

但我无法使用 zmv 将其转换为新文件名。zsh shell中有什么建议吗?谢谢,

4

1 回答 1

2

不使用find,使用zmv。使用( )对来获取您想要的文件名的位,并使用${1}${2}来引用它们。这是我的文件夹结构:

$ ls **/*
Sample_1234/all_R2.gz  Sample_4567/all_R2.gz
Sample_2345/all_R2.gz  Sample_6890/all_R2.gz

Sample_1234:
all_R2.gz

Sample_2345:
all_R2.gz

Sample_4567:
all_R2.gz

Sample_6890:
all_R2.gz

这是zmv假设你已经加载了它

$ zmv -n 'Sample_(*)/all_R2.gz' 'Sample_${1}/${1}_R2.gz'
mv -- Sample_1234/all_R2.gz Sample_1234/1234_R2.gz
mv -- Sample_2345/all_R2.gz Sample_2345/2345_R2.gz
mv -- Sample_4567/all_R2.gz Sample_4567/4567_R2.gz
mv -- Sample_6890/all_R2.gz Sample_6890/6890_R2.gz

从当前目录中获取文件名中的_和之间的所有内容,这允许我们引用目录名末尾的数字字符串。然后我们使用引用将其插入文件名,替换./${1}all

zmv -n在你做之前看看会发生什么是非常值得的。

于 2013-08-20T13:35:00.730 回答