1

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

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

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

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

有什么比 find 更适合在这里使用的吗?

4

4 回答 4

2

unixfind工具呢?

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

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

这将为找到的每个文件打印一个文件路径stdout

解释:

  • find- 调用find,递归查找文件
  • "$DIR1" "$DIR2"- 指定要查看的目录路径列表
  • -type f- 只考虑文件(不考虑目录、链接)
  • -name "$FILE"- 指定文件的名称。
于 2012-12-19T21:25:25.280 回答
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
于 2012-12-19T21:34:44.900 回答
0

比“查找”更简单快捷的是“定位”。

locate -b file.txt

这将告诉 file.txt 的位置。

Locate 有一个文件和目录的索引数据库,所以它更快。但是 find 更强大,在管道命令或执行其他高级操作的情况下很有用。

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

于 2012-12-19T21:38:46.163 回答
0

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

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

第一部分检查 DIR 中 FILE 的存在,只有当它成功 (&&) 时,echo才会运行该部分

于 2012-12-19T21:40:26.070 回答