単一のコマンドを使用して、現在の作業ディレクトリの親ディレクトリと子ディレクトリで特定のパターンを持つファイルを見つける方法は?
ファイル名 -テスト.txt、ファイルには次のパターンがあります。nslookup
このファイルは3つのディレクトリにあります。/家、/ホームページ1そして/ホーム/1/2
私は現在/ホームページ1。次のコマンドを試しました。
find ../ -type f -name "test.txt"
出力:
../test.txt
../home/1/test.txt
../home/1/2/test.txt
ファイルが見つかったので、次のコマンドを試しました。
$ find ../ -type f -exec grep "nslookup" {} \;
nslookup
nslookup
nslookup
ファイル名は表示されません。
注文する:
find . -type f -name "test.txt" | xargs grep "nslookup"
==> pwdとサブディレクトリのファイルを教えてください。
./1/test.txt:nslookup
./test.txt:nslookup
ただし、次のように親ディレクトリで検索しようとすると、結果が正しくありません。
find ../ -type f -name "test.txt" | xargs grep "nslookup"
User@User-PC ~/test
$ uname -a
CYGWIN_NT-6.1 User-PC 2.5.2(0.297/5/3) 2016-06-23 14:29 x86_64 Cygwin
ベストアンサー1
注文
find ../ -type f -exec grep "nslookup" {} \;
grep
単一のファイルしか使用できない場合、デフォルトではファイル名が表示されないことを除いて、ほぼ正確です。
この問題を解決する2つの方法は次のとおりです。
常にファイル名を表示するには、
grep
非標準(しかし一般的な)オプションでaを使用します。-H
find ../ -type f -exec grep -H 'nslookup' {} \;
grep
複数のファイル名を指定してください。find ../ -type f -exec grep 'nslookup' /dev/null {} \;
興味があればただファイル名を入力した場合、これを行うには2つの方法があります。
-l
標準オプションの使用grep
:find ../ -type f -exec grep -l 'nslookup' {} \;
ファイルに一致するエントリがある場合、
find
ファイルのパス名を出力します。find ../ -type f -exec grep -q 'nslookup' {} \; -print
grep
これはパターンが一致するかどうかを検出するためにのみ使用されます。これら-q
のオプションは何も出力しないようにし、find
ユーティリティの終了ステータスを使用してジョブを実行するかどうかを決定します-print
。