2016-11-25 151 views
0

我想重命名目錄中的文件與子目錄爲父它的目錄名稱+連續數字。批量重命名圖像文件夾名稱+連續編號

例如:

hello-images/ 
    ├── first-black 
    │   ├── full_b200056_m.png 
    │   ├── full_b200056_x_DSC01973.JPG 
    │   ├── full_b200056_x_DSC01978.JPG 
    │   ├── full_b200056_x_DSC01988.JPG 
    │   ├── full_b200056_x_DSC01994.JPG 
    │   ├── full_b200056_x_DSC02003.JPG 
    ├── second-atlas 
    │   ├── full_b200035_m1.png 
    │   ├── full_b200035_x_3926.JPG 
    │   ├── full_b200035_x_3928.JPG 
    │   ├── full_b200035_x_3931.JPG 
    │   ├── full_b200035_x_3944.JPG 

Desidered結果:

hello-images/ 
├── first-black 
│   ├── first-black_1.png 
│   ├── first-black_2.JPG 
│   ├── first-black_3.JPG 
│   ├── first-black_4.JPG 
│   ├── first-black_5.JPG 
│   ├── first-black_6.JPG 
├── second-atlas 
│   ├── second-atlas_1.png 
│   ├── second-atlas_2.JPG 
│   ├── second-atlas_3.JPG 
│   ├── second-atlas_4.JPG 
│   ├── second-atlas_5.JPG 
+0

下'第一black'圖像爲什麼改名爲'1,3,4, 5,6,7爲什麼不是'2'? – Inian

回答

1

hello-images目錄,這樣做:

for d in */; do i=1; for f in "$d"/*.*; do echo mv -- "$f" "$d${d%/}_${i}.${f##*.}"; ((i++)); done; done 

這是幹運行,它會顯示mv命令被運行。如果滿意的變化進行,除去echo實際行動:

for d in */; do i=1; for f in "$d"/*.*; do mv -- "$f" "$d${d%/}_${i}.${f##*.}"; ((i++)); done; done 

展開形式:

for d in */; do 
    i=1 
    for f in "$d"/*.*; do 
     mv -- "$f" "$d${d%/}_${i}.${f##*.}" 
     ((i++)) 
    done 
done 
+0

嗨,我剛剛編輯你的代碼,它缺少最終文件名的下劃線和.jpg擴展名。代碼的一個小問題:重命名的文件被移入根hello-images /目錄。 – Adrian

+1

@Adrian不要硬編碼任何東西,現在檢查。 – heemayl