!/bin/bash

!/bin/bash

我有下面的脚本,它在当前目录中查找文件,如果该文件存在于目录中则评估为 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

相关内容