This question already has answers here:
Closed 2 years ago.
Batch renaming files with Bash
(10个答案)
我想把一个有子目录的目录中的文件重命名为父目录名+序列号。
例如:
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

设计结果:
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

最佳答案

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

关于linux - 将图像批量重命名为文件夹名称+序列号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40808695/

10-14 03:19