假设我有一个名为 的目录/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