循环遍历目录unix shell编程

循环遍历目录unix shell编程

使用 for 循环遍历目录中的文件名。在此版本中,仅循环遍历没有“.old”扩展名的文件名

在循环内部,将文件重命名为新名称。

答案1

假设可以访问 bash 4+ (使用 检查bash --version),可以使用两行命令完成此操作:

shopt -s extglob
for f in !(*.old); do mv -- "$f" new_"$f"; done

答案2

你需要替换dodone这是如何使用的示例$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

相关内容