2016-11-25 127 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