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

ディレクトリを配列に入れてから、配列をループして、ファイルが存在するかどうかをテストできます。

#!/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 に答える
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 に答える
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 に答える