2014-03-13 62 views
1

我在Linux系統上,我試圖在許多子目錄順序文件名重命名所有.jpg文件重命名Recusively .jpg文件,所以在每個子目錄中的所有JPEG文件被重命名0001.JPG 0002。 JPG,等我有一個「重命名」命令,在一個單獨的目錄工作:所有子目錄中

rename -n 's/.*/sprintf("%04d",$::iter++ +1).".jpg"/e' *.jpg 

我想用這樣的:

for i in ls -D; do rename -n 's/.*/sprintf("%04d",$::iter++ +1).".jpg"/e' *.jpg; done 

但輸出我得到這個:

*.jpg renamed as 0001.jpg 

每個子目錄。我究竟做錯了什麼?

回答

0

您需要按照 的順序使用反引號(或使用$(...)bash語法)來遍歷其輸出。還與* .jpg文件 名模式,例如一起使用$i可變

for i in `ls -D` 
do 
    rename -n 's/.*/sprintf("%04d",$::iter++ +1).".jpg"/e' $i/*.jpg 
done 

然而,對於這種情況,你要遍歷所有子目錄,你是 使用find命令的更好:

for i in `find . -type d`; do rename ... 
+0

非常好!當你知道你在做什麼時很簡單。謝謝! – rbhyland

0

在我看來,你已經忘了更改目前的工作目錄,所以它應該看起來像

for i in *; do 
    [ -d "$i" ] || continue 
    pushd "$i" 
    # rename is here 
    popd 
done 
相關問題