重命名子文件夹中的 .jpg 文件

Renaming .jpg files in the sub-folders

我的子文件夹中有大量文件需要重命名。例如,我有:

ParentFolder/sub-Folders/*.jpg

如何复制具有如下新命名约定的文件?

ParentFolder1.jpg
ParentFolder2.jpg

一种方法是通过 GNU parallel. Tutorial here:

find ./ParentFolder -name "*.jpg" | parallel "mv {} DESTINATION/ParentFolder{#}.jpg"

要在执行之前查看要 运行 的命令,请尝试:

find ./ParentFolder -name "*.jpg" | parallel --dryrun "mv {} DESTINATION/ParentFolder{#}.jpg"

使用文件通配在完整路径上使用重命名:

*/*

不明白的可以用:

测试
echo */*

第一个 * 是您的目录,第二个 * 是您的文件名。在正则表达式中捕获它们:

(.*)/(.*)

现在 $1 是您的父文件夹名称,$2 是您的文件名。您可以像这样轻松构建您的解决方案:

rename -n "s/(.*)\/(.*)/$1\/$1$2/" */*

它保持目录结构并将目录名作为前缀添加到它的每个文件中。您可以通过简单地将 $1\/$1$2 更改为 $1$2 来向上移动您的文件。然后您只需使用 rmdir 删除空目录。

我自愿添加了选项-n,这样您复制粘贴时就不会弄得一团糟。当你觉得好的时候就把这个选项去掉。

    adrien@adrienLT:~/Documents/PEV$ cp -r Holiday/ Holiday_copy/
adrien@adrienLT:~/Documents/PEV$ tree Holiday*
Holiday
├── France
│   ├── 1.jpg
│   ├── 2.jpg
│   └── 3.jpg
├── Italy1
│   ├── 1.jpg
│   ├── 2.jpg
│   └── 3.jpg
└── Italy2
    ├── 1.jpg
    ├── 2.jpg
    └── 3.jpg
Holiday_copy
├── France
│   ├── 1.jpg
│   ├── 2.jpg
│   └── 3.jpg
├── Italy1
│   ├── 1.jpg
│   ├── 2.jpg
│   └── 3.jpg
└── Italy2
    ├── 1.jpg
    ├── 2.jpg
    └── 3.jpg

6 directories, 18 files
adrien@adrienLT:~/Documents/PEV$ cd Holiday_copy/
adrien@adrienLT:~/Documents/PEV/Holiday_copy$ rename "s/(.*)\/(.*)/$1\/$1$2/" */*
adrien@adrienLT:~/Documents/PEV/Holiday_copy$ tree .
.
├── France
│   ├── France1.jpg
│   ├── France2.jpg
│   └── France3.jpg
├── Italy1
│   ├── Italy11.jpg
│   ├── Italy12.jpg
│   └── Italy13.jpg
└── Italy2
    ├── Italy21.jpg
    ├── Italy22.jpg
    └── Italy23.jpg

3 directories, 9 files