我想用其中单个文件的名称重命名每个文件夹。例如:
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 中我尝试过,但可能我写的语法不对。你能帮助我吗?
答案1
假设它们都在同一个父目录中:
for f in */*.jpg ; do mv "$(dirname "$f")" "$(basename "$f" .jpg)" ; done
慢动作:
*/*.jpg
将列出Folder1/AAA.jpg
,,Folder2/BBB.jpg
FOlder3/CCC.jpg
$(dirname "$f")
提取物Folder1
,,Folder2
FOlder3
"$(basename "$f" .jpg)"
提取文件名并删除扩展名:AAA
,,...BBB
CCC
- 因此你最终会得到
mv Folder1 AAA
...mv Folder2 BBB
答案2
以下是几乎类似的 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
如果您需要检查扩大是图片或者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%.*}"
进行试运行测试。
进一步阅读:
答案3
这个 bash 脚本改变文件夹名称。
#!/bin/bash
echo Enter old foldername
read oldfoldername
echo Enter new foldername
read newfoldername
mv $oldfoldername $newfoldername
Usage: bash {filename you copied script into}.sh