
このコマンドの出力について誰かアイデアをお持ちですか、私はそれについてグーグルでたくさん検索しましたが、役に立つものは何も見つかりません
find . -type f -exec grep -H PATH {} \;
前もって感謝します
答え1
コマンド
find . -type f -exec grep -H PATH {} \;
-type f
現在のディレクトリ ( ) 以下にあるすべての通常ファイル ( ) を検索し.
、各ファイルに対して を 現在のディレクトリを基準としたファイルの完全パス名に置き換えてgrep -H PATH {}
を 実行します。{}
オプション-H
はgrep
非標準ですがよく実装されており、一致する各行の先頭に、その行が見つかったファイルのパス名が付けられるようになります。代わりにコマンドを に変更して、一致する行を含むファイルのパス名を常に出力するようにgrep PATH /dev/null {}
強制することもできます (標準では、コマンド ラインで少なくとも 2 つのファイルが指定されている場合にこれを行います)。grep
grep
で使用されるパターンはgrep
文字列ですPATH
。
要約すると、このコマンドは、現在のディレクトリまたはその下にあるすべての通常ファイルから、任意のPATH
場所に部分文字列を記述するすべての行を検索して出力します。各行の先頭には、行を含むファイルのパス名が付きます。
これを個人のホーム ディレクトリで実行したときに得られる出力の一部:
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_NM:FILEPATH=/usr/bin/nm
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_SKIP_RPATH:BOOL=NO
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_STRIP:FILEPATH=/usr/bin/strip
grep
コマンドは、各ファイルごとに 1 回実行するのではなく、一度にできるだけ多くのファイルに対してバッチで実行することで、より効率的に実行できます。
find . -type f -exec grep -F -e PATH /dev/null {} +
また、grep
ここではコマンドを少し変更して-F
、文字列PATH
を弦正規表現としてではなく、-e
次の引数がパターンであることを示すためにのみ使用されます (たとえば、パターンが後でダッシュで始まるものに変更される場合に便利です)。
述語の引数の末尾の から\;
への変更により、見つかったパス名を、ユーティリティをそれぞれ実行するのではなく、バッチに収集するようになります。+
-exec