递归重命名文件,同时保留扩展名

递归重命名文件,同时保留扩展名

我有一堆目录,每个目录都包含一个 *.txt 文件(以及其他非 *.txt 文件)。

我想从命令行递归重命名这些文件,基本上是将 *.txt 重命名为 info.txt。因此,所有 *.txt 文件都应重命名为 info.txt。每个目录中始终只有一个 .txt 文件。

我一直在查看这里(和其他地方)的多个看似相似的问题,但它们要么集中精力改变扩展,要么不以递归方式工作,......

任何帮助都将不胜感激。平台:Linux 或 MacOSX。

答案1

find ~/dir -type f -name "*.txt" -not -name "info.txt" \
           -execdir mv -v {} info.txt \;

或者:

find ~/dir -type f -name "*.txt" -not -name "info.txt" \
| while read -r file; do
    mv "$file" "${file%/*}/info.txt"
done

答案2

您还可以使用rename来自 Ubuntu 的实用程序,它接受 Perl 表达式来修改文件名。

find . -iname "*.txt" | rename "s/[^\/]+\.txt$/info.txt/"

答案3

grawity 的答案是最快的方法,也许是更“正确”的方法,但也有一些基于 GUI 的工具可以执行文件重命名任务,并且界面简单,并支持正则表达式:克雷纳梅(基于 KDE),GP重命名pyRenamer(侏儒基地)。

相关内容