我有下面的脚本,它在当前目录中查找文件,如果该文件存在于目录中则评估为 true,如果不存在则评估为 false
#!/bin/bash
printf "\n Please enter a file name "
read num3
if [ -f $num3 ]
then
printf "It is valid script "
else
printf "Invalid file name "
fi
我如何检查其他目录中是否存在文件而不是编写脚本的当前目录?
答案1
尝试这个
#!/bin/bash
printf "\n Please enter a file name "
read num3
printf "\n Please enter the path to check "
read path2check
if find $path2check -name $num3 -print -quit |
grep -q '^'; then
echo "the file exists!"
else
echo "the file does not exist!"
fi
答案2
[ -f $num3 ]
当您将 split+glob 运算符应用于 的内容时没有意义$num3
。
[ -f "$num3" ]
将检查路径$num3
(如果以 开头则为绝对路径/
,如果不是则相对于当前工作目录)解析为该类型的文件常规的或常规文件的符号链接。
如果你想检查相$num3
对于给定目录是否是常规文件,只需使用:
dir=/some/dir
[ -f "$dir/$sum3" ]
您可能需要事先检查是否$sum3
不以 a 开头/
或不包含/
。
请注意,如果$dir
是/
,该方法将不起作用//foo/bar
特别对待路径的系统。因此,您可能需要dir=/
特殊对待这种情况。
case $dir in
/) file=$dir$num3
*) file=$dir/$num3
esac
[ -f "$file" ]
检查这$num3
是一个相对路径(到常规的file) 中以当前目录为根的目录树中的任何目录,最好改用zsh
:
files=(**/$num3(DN-.))
if (($#files > 0)); then
echo "Success: $#files such file(s) found"
else
echo Failure
fi
答案3
考虑这个例子,我想添加一个文件(如果它存在于我的composite_firmware.bin 映像的某个位置)。
步骤1:从shell导出VSPA_IMAGE1=/path/where/image/is/ located/file.bin。步骤2:添加如果通过脚本找到文件并附加到composite_firmware.bin的0x200000位置
if [ -f "$VSPA_IMAGE1" ]; then
printf "\nAdding $VSPA_IMAGE1 to composite image\n"
dd if=$VSPA_IMAGE1 of=composite_firmware.bin seek=2048 bs=1024
else
printf "\nWarning!!!! export VSPA_IMAGE1 location/path"
fi
答案4
您可以使用 find 命令搜索根目录并查看给定名称的文件是否存在。这将搜索从根目录定向的所有目录和子目录
!/bin/bash
printf "\n 请输入文件名"
读取数字3
如果[ find / -type f -name $num3 2>/dev/null| wc -l
-gt 0];然后 echo "这是有效的脚本" else echo "无效的文件名" fi