例如我有以下文件:
./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]