如何在不获得bash中拒绝消息的情况下比较文件名



我想查看目录和子目录中的所有文件然后删除具有特殊名称

的文件

这是我的代码

for filename in $1*;do
    if("$filename" == "hello.txt");then
            echo "WOW!"
    fi
    done

我的测试目录是测试/有两个文件。一个名称" hello.txt"one_answers" world.txt";但是,当我运行代码时,我会收到

noStrange.sh: line 2: TEST/hello.txt: Permission denied
noStrange.sh: line 2: TEST/world.txt: Permission denied

我尝试了命令chmod u+x scriptname,它不起作用

这就是我输入

sh scriptname TEST/

谁能告诉我脚本有什么问题?

使用 basename命令从文件路径变量获取文件的basename。

for filename in $1*;do if [[ $(basename "$filename") == "hello.txt" ]] ; then echo "wow";fi;    done

使用查找命令。这将搜索当前文件夹中的所有文件,以及它的子文件夹。

find . -name 'hello.txt'

直接答案是您的测试语法是错误的;你应该有

if ["$filename" == "hello.txt"]; then

等。但是,您的代码有一些问题。由于$filename将匹配TEST/hello.txt而不是hello.txt,因此您可能不会获得所需的行为。另外,如果您要删除具有某些名称的文件,则可能需要一个像

这样的普通unix命令

rm TEST/hello.txt

如果您想删除图案,则可以使用Glob/通配符,或findxargsrm的组合。例如

find TEST -name 'hello*.txt' | xargs rm

相关内容

最新更新