重命名子文件夹中的 .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
我的子文件夹中有大量文件需要重命名。例如,我有:
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