用于同时重命名不同目录中的文件的 bash 脚本

用于同时重命名不同目录中的文件的 bash 脚本

假设我有一个名为 的目录/all_images,并且该目录中有大量目录,所有目录的名称如下dish_num所示。并且在每个 dish 目录中,都有一个名为 的图像rgb.png。我怎样才能将所有图像文件重命名为其目录的名称。

|
├── dish_1
│   └── rgb.png
├── dish_2
│   └── rgb.png
├── dish_3
│   └── rgb.png
├── dish_4
│   └── rgb.png
└── dish_5
    └── rgb.png

|
├── dish_1
│   └── dish_1.png
├── dish_2
│   └── dish_2.png
├── dish_3
│   └── dish_3.png
├── dish_4
│   └── dish_4.png
└── dish_5
    └── dish_5.png

答案1

一个简单的 shell 循环就足够了:

for d in dish_*; do 
  echo mv "$d/rgb.png" "$d/$d.png"
done

或者(如果您需要从包含目录以外的其他地方运行它)

for d in path/to/dish_*; do 
  f="${d##*/}.png"
  echo mv "$d/rgb.png" "$d/$f"
done

echo一旦您确信它将做正确的事情,就将其删除。


如果你想要更奇特一点,你可以用 GNU 做这样的事情parallel

parallel echo mv {}/rgb.png {}/{/.}.png ::: path/to/dish_*

或(如果参数列表太长)

printf '%s\0' path/to/dish_* | parallel --null echo mv {}/rgb.png {}/{/.}.png

相关内容