我想根据目录名的一部分重命名目录中的文件。我有以下结构:
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中的任何建议?谢谢,
答案 0 :(得分: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
,assuming you've got it loaded:
$ 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
来查看在执行此操作之前会发生什么是非常值得的。