我有一堆目录,每个目录都包含一个 *.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/"