我有一个文件夹,里面有 40 个子文件夹,每个子文件夹包含 20~21 张 jpg 照片,全部命名为01.jpg->20.jpg子文件夹名为自然套装01到自然套装40
我想将所有图片移动到一个文件夹中,名称如下自然_套装_01_01.jpg到自然集40_20.jpg或类似的东西,我不太关心名字。
如果我不清楚的话,这是一棵树:
├── Nature_Set_01
│ ├── 01.jpg
│ ├── 02.jpg
│ ├── ...
│ └── 20.jpg
├── Nature_Set_02
│ ├── 01.jpg
│ ├── 02.jpg
│ ├── ...
│ ├── 21.jpg
├── ...
├── Nature_Set_40
│ ├── 01.jpg
│ ├── 02.jpg
│ ├── ...
│ ├── 20.jpg
我不是 Bash 专家,我尝试过如何操作,但失败了。有人能帮忙吗?
答案1
在父目录中执行此脚本。
mkdir folder
for file in Nature_Set_*/*.jpg; do
mv "$file" "folder/${file/\//_}"
done
它创建目录
folder
然后循环匹配文件
Nature_Set_*/*.jpg
,将找到的每个文件移动至"folder/${file/\//_}"
。最后这个结构
${file/\//_}
是参数扩展,其骨架为${parameter/pattern/replacement}
。由于/
已经是构造的分隔符,因此如果要将其出现在 中,则需要对其进行转义pattern
。因此文件名中/
的 被 替换为。 示例:变为。_
Nature_Set_01/01.jpg
Nature_Set_01_01.jpg