我想用里面的单个文件的名称重命名每个文件夹。例子:
Folder1/AAA.jpg
Folder2/BBB.jpg
FOlder3/CCC.jpg
Folder4/05.02.2019.jpg
to
AAA/AAA.jpg
BBB/BBB.jpg
CCC/CCC.jpg
05.02.2019/05.02.2019.jpg
在 Windows 中,我可以在一个简单的文件批处理中使用此脚本执行此操作:
for /d %%a in (*) do (
for %%b in ("%%a\*.jpg","%%a\*.png") do (
ren "%%a" "%%~nb"
)
)
在 Ubuntu 中,我尝试过,但也许我写的语法错误。你能帮助我吗?
这是几乎类比的 bash 脚本:
#!/bin/bash
for i in Folder*/*
do
FILE="$(basename "$i")"
mv "$(dirname "$i")" "${FILE%.*}"
done
用法示例:
$ tree
.
├── Folder1
│ └── some name.png
└── Folder2
└── 03.02.2019.jpg
2 directories, 2 files
$ for i in Folder*/*; do FILE="$(basename "$i")"; mv "$(dirname "$i")" "${FILE%.*}"; done
$ tree
.
├── 03.02.2019
│ └── 03.02.2019.jpg
└── some name
└── some name.png
2 directories, 2 files
如果您需要检查扩展名是jpg还是png:
#!/bin/bash
for i in Folder*/*
do
if [[ $i =~ (jpg|png)$ ]]
then
FILE="$(basename "$i")"
mv "$(dirname "$i")" "${FILE%.*}"
fi
done
您可以使用*/*
代替来消除目录名称的限制Folder*/*
。您也可以修改相关行以echo mv "$(dirname "$i")" "${FILE%.*}"
进行试运行测试。
进一步阅读:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句