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

Bash 重命名子文件夹中的.jpg文件,bash,file-rename,gnu-parallel,Bash,File Rename,Gnu Parallel,我需要重命名子文件夹中的大量文件。例如,我有: ParentFolder/sub-Folders/*.jpg 如何按照如下方式复制具有新命名约定的文件 ParentFolder1.jpg ParentFolder2.jpg 一种方法是通过。教程: 要在执行命令之前查看要运行的命令,请尝试: find ./ParentFolder -name "*.jpg" | parallel --dryrun "mv {} DESTINATION/ParentFolder{#}.jpg" 一种方法是通过

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

ParentFolder/sub-Folders/*.jpg
如何按照如下方式复制具有新命名约定的文件

ParentFolder1.jpg
ParentFolder2.jpg
一种方法是通过。教程:

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

find ./ParentFolder -name "*.jpg" | parallel --dryrun "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

使用文件全局复制在完整路径上使用重命名:

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

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
啊,
--dryrun
,甚至更好!祝大家好运。啊,
--dryrun
,更好!祝大家好运。