使用 for 循环遍历目录中的文件名。在此版本中,仅循环遍历没有“.old”扩展名的文件名
在循环内部,将文件重命名为新名称。
答案1
假设可以访问 bash 4+ (使用 检查bash --version
),可以使用两行命令完成此操作:
shopt -s extglob
for f in !(*.old); do mv -- "$f" new_"$f"; done
答案2
你需要替换do
和done
这是如何使用的示例$f
#!/bin/sh
cd /data
list=`ls -rt`
for f in $list
do
c=`grep -c or=90 $f`
if [ "$c" -gt "0" ]; then
echo "file is $f and it has $c"
fi
done
cd -
答案3
由于这不是一个家庭作业问题,而您只是想知道最好的解决方法,因此这里有一种使用 find 的方法:
find /startfolder -not -name '*.old' -exec mv {} newname_{} \;
这将获取所有不带后缀“old”的文件,并使用前缀 newname_ 重命名它们
不需要 for 循环。
答案4
for filename in $(ls $1)
do
echo $filename | grep "\.old$" > /dev/null
if [ $? != 0 ]
then
mv $1/$filename $1/$filename.old
fi
done