使用bash腳本,如何在多個目錄中替換文件名?

分享于 

2分钟阅读

互联网

 

问题:

我有多个目录,每个目录中有多个文件:


folder1


 file1.jpg


 file2.jpg


 file3.jpg


folder2


 file1.jpg


 file2.jpg


 file3.jpg



想这样替换:


folder1


 0001.jpg


 0002.jpg


 0003.jpg


folder2


 0001.jpg


 0002.jpg


 0003.jpg



bash脚本。


start_dir="/path/to/folder/"


find"$start_dir" -name '*.jpg' -type f 


 |sort 


 |while read name; do 


 ((i++))


 mv -i"$name" 


"$(printf '%s/%04u%s'"$(dirname"$name")" $((i))"$(basename".jpg")")"


 done



执行此操作:


folder1


 0001.jpg


 0002.jpg


 0003.jpg


folder2


 0004.jpg


 0005.jpg


 0005.jpg




答案1:

尝试类似这样的操作,而不是 (( i++ ))


if [[ $tmpdir == $(dirname $name) ]] ; then


 i=i+1;


else


 i=0;


fi


tmpdir=$(dirname $name)




答案2:

在循环中单独处理每个子目录


start_dir="/tmp/start/"



find"$start_dir" -name '*' -type d 


 |sort 


 |while read folder; do



i=0


find"$folder" -maxdepth 1 -name '*.jpg' -type f 


 |sort 


 |while read name; do 


 ((i++))


 mv -i"$name" 


"$(printf '%s/%04u%s'"$(dirname"$name")" $((i))"$(basename".jpg")")"


 done



done




 ls -R


.:


fold1 fold2



./fold1:


43.jpg aa.jpg a.jpg



./fold2:


ba.jpg bb.jpg wbb.jpg




ls -R


.:


fold1 fold2



./fold1:


0001.jpg 0002.jpg 0003.jpg



./fold2:


0001.jpg 0002.jpg 0003.jpg





文件  rep  files  DIR  repl  替换  
相关文章