我正在尝试查找文件并检查多个位置,但不是只是找到它并继续前进,我想确切地知道它在哪里。 “find”是否返回除传递给查询查询的值以外的值?如果它发现了什么,它也返回true或0?
FILE="file.txt"
DIR1="/path1/"
DIR2="/path2/"
我知道这在语法上是不正确的,但我需要的是像......
if ${DIR1}${FILE} = true
then
echo "${FILE} has been found in ${DIR1}"
fi
有没有比在这里找到更好的东西?
答案 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
部分