搜索特定的扩展文件(shellscript)

时间:2013-09-13 02:18:14

标签: bash shell

我是shell脚本的新手,我有这个脚本:

#!/bin/bash

path_file_conf=/fullpath/directory/*.conf
if [ -e "$path_file_conf" ];then
    echo "Found file"
else
    echo "No found file"
fi

即使我在/ fullpath / directory /文件夹中有.conf文件,结果总是“找不到文件”。

我可以知道代码的哪一部分是错的吗? 提前谢谢!

3 个答案:

答案 0 :(得分:2)

表达式:

path_file_conf=/fullpath/directory/*.conf

可能有多个匹配的路径名。因此$path_file_conf的价值可能会最终成为,例如:

/fullpath/directory/foo1.conf /fullpath/directory/foo2.conf

条件:

if [ -e "$path_file_conf" ]; then

检查是否存在单个文件。如果“/fullpath/directory/foo1.conf /fullpath/directory/foo2.conf”没有命名“单个文件”,它不会命名,那么即使文件存在,条件也会失败。

你可以这样检查。如果路径没有扩展,它将失败并退出。如果它找到至少一个好路径,它将成功并退出。

for pf in $path_file_conf ; do
  if [ -e "$pf" ] ; then
    echo "Found"
    break
  else
    echo "Not found"
  fi
done

答案 1 :(得分:2)

我会尝试这样的事情:

for filename in /fullpath/directory/*.conf
do
    if [ -e "$filename" ]  # If finds match...
    then
        echo "Found file"
        echo
    else
        echo "No found file"

    fi
done   

我没有测试过,所以我不确定它是否有效,但它至少会给你整体策略。

答案 2 :(得分:1)

造成麻烦的一行是:

path_file_conf=/full/path/directory/*.conf

当有多个文件要匹配时,或者当没有文件匹配时,shell不会对名称进行通配符扩展(所以(在具有带星号的文件名为*.conf的异常情况下除外) -e测试失败。 {> 1}}中可能存在一个选项,当通配符无法匹配时会生成错误;我永远不会用它。

您可以使用:

bash

这将为您提供一个数组,其中包含文件的名称作为数组的元素。但是,如果没有匹配的文件,它会为您提供编写为数组唯一元素的名称。

从那里,您可以依次检查每个文件:

path_file_conf=( /full/path/directory/*.conf )

您可以使用for conf_file in "${path_file_conf[@]}" do if [ -e "$conf_file" ] then echo "Found file $conf_file" else echo "No such file as $conf_file" fi done 确定名称的数量,但请记住,1可能表示实际文件或不存在的文件。