使用文件夹名称重命名文件并将其移动到一个大文件夹

使用文件夹名称重命名文件并将其移动到一个大文件夹

我有一个文件夹,里面有 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.jpgNature_Set_01_01.jpg

相关内容