2013-08-19 80 views
0

我想根據目錄名稱的一部分重命名目錄中的文件。我有以下結構:使用zsh重命名基於部分目錄名稱的文件

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中的任何建議?謝謝,

回答

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 

而這裏的zmvassuming 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來看看在你做之前會發生什麼。

+0

非常感謝您的回答。出於某種原因,我直到現在纔看到。仍然有幫助。 – user1148636

相關問題