Bash查找返回值

时间:2012-12-19 21:23:34

标签: bash find

我正在尝试查找文件并检查多个位置,但不是只是找到它并继续前进,我想确切地知道它在哪里。 “find”是否返回除传递给查询查询的值以外的值?如果它发现了什么,它也返回true或0?

FILE="file.txt"
DIR1="/path1/"
DIR2="/path2/"

我知道这在语法上是不正确的,但我需要的是像......

if ${DIR1}${FILE} = true
then
    echo "${FILE} has been found in ${DIR1}"
fi

有没有比在这里找到更好的东西?

4 个答案:

答案 0 :(得分:2)

unix find工具怎么样?

FILE="file.txt"
DIR1="/path1/"
DIR2="/path2/"

find "$DIR1" "$DIR2" -type f -name "$FILE"

这会为找到的每个文件打印stdout的文件路径。

<强>解释

  • find - 调用find,递归查找文件
  • "$DIR1" "$DIR2" - 指定要在
  • 下查看的目录路径列表
  • -type f - 仅考虑文件(不是目录,链接)
  • -name "$FILE" - 指定文件名。

答案 1 :(得分:2)

您可以将目录放在一个数组中,然后遍历数组并测试文件是否存在:

#!/bin/bash
FILE="file.txt"
DIR1="/path1/"
DIR2="/path2/"
DIRS=(DIR1 DIR2) 

for dir in ${DIRS[*]}
do
   if [ -e $FILE ]
   then
      echo "File " $FILE " exists in directory " $dir
   fi
done

答案 2 :(得分:0)

比“find”更简单快捷的“定位”。

locate -b file.txt

这将告诉file.txt的位置。

Locate有一个索引的文件和目录数据库,所以它更快。然而,find更强大,在管道命令或执行其他高级操作时非常有用。

如果要检查文件是否存在以进行条件执行,请查看以下链接: http://tldp.org/LDP/abs/html/fto.html

答案 3 :(得分:0)

@ McMillen的另一个版本的答案,只是更短一点,可能不那么可读:

[[ -e ${DIR}${FILE} ]] && echo "$FILE has been found in ${DIR}"

第一部分检查DIR中是否存在FILE,只有成功(&amp;&amp;),才会运行echo部分