在目录中查找所有的*.sh文件

4
我想在某个目录中找到所有的*.sh文件,但是脚本中存在一些错误...
#!/bin/sh
for plik in /var/panel/starter/*
do  
    if [ $(basename "$plik") != "priority" ] && [ $(basename "$plik") != "PRIORITY" ] 
    then
    for plik in $plik/*
    do
        filename=$(basename "$plik")
        extension="${filename##*.}"
        filename="${filename%.*}"
        if [ "$extension" == "sh" ]
        then
        echo $plik
        fi
    done
    fi
done 

在 /var/panel/starter 目录下有一些文件夹,在这些文件夹中有 shell 脚本,因此我使用了两次 for 循环。
以下是错误信息:
[: 19: *: unexpected operator
[: 19: sh: unexpected operator
[: 19: sh: unexpected operator
[: 19: sh: unexpected operator
[: 19: *: unexpected operator

我猜问题出在空文件夹上,比如:
/var/panel/starter/cs16/*

我不知道如何处理这个问题,这与IT技术有关。


1
你能直接使用 find -name "*.sh" 吗?如果你想要进行一些筛选,你可以使用 -regex 或将输出通过管道传递给 grep。或者我误解了你的需求。 - Kent
1
/var/panel/starter/*.sh? - devnull
这只是一个例子。稍后我想要执行那些脚本。而不是echo $plik,它将是sh $plik。如果没有if [ "$extension" == "sh" ]条件,它也会执行/var/panel/starter/cs16/*,我正在尝试避免这种情况。 @devnull,它不起作用。 - Filip Frątczak
3个回答

20

当你可以使用以下方式实现相同的功能时,为什么要使用脚本:

find path_to_folder -iname "*.sh"

3

sh: unexpected operator 这个提示应该能帮到你。

你正在使用 sh 命令来执行你的脚本,但是第19行的运算符 == 不被支持。试着使用 bash 命令来执行你的脚本,或者改用 = 运算符。


1
为什么不使用find和grep?
find /var/panel/starter/ -name "*.sh" | grep -iv "/var/panel/starter/priority"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接