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

时间:2016-02-02 03:52:21

标签: bash file-rename gnu-parallel

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

ParentFolder/sub-Folders/*.jpg

如何使用新的命名约定复制文件,如下所示?

ParentFolder1.jpg
ParentFolder2.jpg

2 个答案:

答案 0 :(得分:4)

执行此操作的一种方法是通过GNU parallel。教程here

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

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

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

答案 1 :(得分:1)

使用文件globbing在整个路径上重命名:

*/*

如果您不理解,可以使用以下方法进行测试:

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