現在のディレクトリでファイルを検索し、ファイルがディレクトリにある場合は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
相対パスであることを確認してください(定期的なファイル)現在のディレクトリにルートがあるディレクトリツリーで以下を使用することをお勧めしますzsh
。
files=(**/$num3(DN-.))
if (($#files > 0)); then
echo "Success: $#files such file(s) found"
else
echo Failure
fi
答え3
この例を考えてみましょう。私のcomplex_firmware.binイメージのどこかにファイルがある場合は追加したいと思います。
ステップ1:シェルからVSPA_IMAGE1 = / path / where / image / is / located / file.binをエクスポートします。ステップ2:スクリプトでファイルが見つかったら、それを追加して0x200000の場所にcomplex_firmware.binに追加します。
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コマンドを使用してルートディレクトリを検索し、特定の名前のファイルが存在することを確認できます。ルートディレクトリで指定されたすべてのディレクトリとサブディレクトリを検索します。
!/空/配布
printf "\nファイル名を入力してください"
数字3を読む
if[ find / -type f -name $num3 2>/dev/null| wc -l
-gt 0]; then echo "有効なスクリプトです。" else echo "無効なファイル名" fi