shell脚本文件搜索

shell script file search

我正在尝试通过路径删除以 collectorlist* 开头的文件,因此我编写了如下所示的 shell 脚本。但是 -e 选项总是给出未找到的输出。请建议我。

脚本

if [ -d "/abc" ] ; then
for c in `ls -1 "/abc/"`; do
  if [ -d "/abc/${c}" ] ; then
     if [ -d "/abc/${c}/dynatrace/agent/linux-x86-64/agent/conf/" ] ; then
        if [ -e "/bxp/${c}/dynatrace/agent/linux-x86-64/agent/conf/collectorlist* " ] && echo "Found" || echo "Not found" ; then
          `ls -ltr "sat.txt"` > /users/home/abc/test.txt
            fi
         fi
   fi
 done
fi

您的代码存在一些问题。

  1. 在星号之后和结束双引号之前有一个尾随 space。
  2. 您在双引号内使用了星号;在双引号内,像星号这样的通配符不会被评估,而是被逐字记录。
  3. 您将反引号与重定向一起使用。这将执行反引号内的内容,用它的输出替换反引号表达式并执行结果行。因此,您的 ls 命令需要给出随后将要执行的命令的名称。我想你不想要那个。只需删除反引号,您可能只想执行 ls 并将其输出重定向到文件中。
  4. 您尝试找出 任何 匹配模式的文件是否存在,并为此使用 [ -e pattern* ]pattern* 评估一个或多个文件名或(none 存在)pattern* 本身(除非你调整你的 shell 以不同的方式表现)。问题是许多值的情况。这些会在您的 [ ... ] 表达式中产生问题。

结果:

if [ -d "/abc" ] ; then
  for c in $(ls -1 "/abc/"); do
    if [ -d "/abc/${c}/dynatrace/agent/linux-x86-64/agent/conf/" ] ; then
      if ls "/bxp/${c}/dynatrace/agent/linux-x86-64/agent/conf"/collectorlist* &> /dev/null; then
        echo "Found"
        ls -ltr "sat.txt" > /users/home/abc/test.txt
      else
        echo "Not Found"
      fi
    fi
  done
fi