从文件名重命名文件夹

从文件名重命名文件夹

我想用其中单个文件的名称重命名每个文件夹。例如:

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.jpgFOlder3/CCC.jpg
  • $(dirname "$f")提取物Folder1,,Folder2FOlder3
  • "$(basename "$f" .jpg)"提取文件名并删除扩展名:AAA,,...BBBCCC
  • 因此你最终会得到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

相关内容