重命名 for 循环中扩展名找到的所有文件

Rename all files found by extension in for loop

我的任务是编写一个脚本,在给定目录中搜​​索所有没有 .old 扩展名的文件,并将文件重命名为这种格式:filename.old。我试过这个脚本:

#!/bin/bash
for i in $(grep "\.[^old]&"  | ls)
do
 mv "/$i" "/$i.old"
done

但它给出了错误的输出。

如何改进?

你可以像这样使用单线:

find . -mindepth 1 ! -name '*.old' -exec mv {} {}.old \;

GNU/Linux 上的示例(Ubuntu 14.04 LTS):

mkdir so
cd so
touch f1 f2.old f3 f4.old
find . -mindepth 1 ! -name '*.old' -exec mv {} {}.old \;
ls

结果:

f1.old f2.old f3.old f4.old

解释:

您可以像这样修改脚本以获得类似的结果:

test.sh.old

#!/bin/bash
for i in $(find . -mindepth 1 ! -name '*.old'); do
        mv "$i" "$i.old"
done

执行 bash test.sh.old 得到类似的结果。

您可能需要尝试一些测试用例以查看单行文件和修改后的 test.sh.old 文件是否通过了这些测试条件。我用您提供的样本对其进行了测试,这 return 是预期的结果。