如何重命名多个文件名包括子文件夹?

如何重命名多个文件名包括子文件夹?

例如我有以下文件:

./dirA/fileA.png
./dirA/fileB.png
./dirA/fileC.png
./dirB/fileD.png
./dirB/fileE.png
./dirB/dirC/fileF.png

是否有任何一行命令或脚本可以将文件名重命名为以下内​​容?

./dirA/[email protected]
./dirA/[email protected]
./dirA/[email protected]
./dirB/[email protected]
./dirB/[email protected]
./dirB/dirC/[email protected]

答案1

尝试:

find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;
  • find .

    这将从当前目录开始文件搜索。

  • -type f

    这会将搜索限制在常规文件中。

  • -name '*.png'

    这会将搜索限制为名称以 结尾的文件.png

  • -execdir bash -c '...' Move {} \;

    这将运行单引号中的命令,并将命令分配$0给找到的文件的名称。在我们的例子中,单引号中的命令是:Move$1

  • mv "$1" "${1%.png}@2x.png"

    这会将文件重命名为以 结尾@2x.png。此构造${1%.png}.png从文件名末尾删除 。因此,会将文件名末尾的${1%.png}@2x.png替换为。.png@2x.png

例子

让我们从包含这些文件的目录开始:

$ find .
.
./dirA
./dirA/fileA.png
./dirA/fileC.png
./dirA/fileB.png
./dirB
./dirB/fileE.png
./dirB/dirC
./dirB/dirC/fileF.png
./dirB/fileD.png

现在,让我们运行命令:

$ find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;

命令执行后,我们现在有这些文件:

$ find .
.
./dirA
./dirA/[email protected]
./dirA/[email protected]
./dirA/[email protected]
./dirB
./dirB/dirC
./dirB/dirC/[email protected]
./dirB/[email protected]
./dirB/[email protected]

相关内容