次の条件をすべて満たすファイル検索を設定しようとしています。
- ワイルドカード文字を含むディレクトリで繰り返し検索します。
- ファイル内容の検索(例:「ファイルのテキスト」)
- 検索するファイル名を定義します(例:script.js)(おそらく#1と組み合わせることができますか?)
- 検索文字列のパスとコンテキストで結果を表示する(たとえば、
/home/user/level_1/level_2/level_3/level_4/level_5/script.js Here is the text in file
...正確な形式は異なる場合がありますが、この情報を含める必要があります。タイムスタンプは必要ありません。パス全体が表示されず、表示されたディレクトリのみが表示される場合例では追加の利点がありますが、level_2
必須ではありません.) - ファイルの変更日に基づいて、最も古いものから最新のものまでソートされた結果を表示します。
以下には、要件1-4を満たす次のコマンドがあります。
grep -r --include=\script.js "text in file" /home/user/level_1/*/level_3/*/level_5/
5番目の項目を含める方法についてのアイデアはありますか?私はzshを使って同様のことをする方法のさまざまな説明を見ましたが、それらをfind
まとめることはできません。
答え1
を使用しているのでzsh
問題になることがあります。
grep -H 'text in file' /home/user/level_1/*/level_3/*/level_5/**/script.js(.Om)
**/
サブディレクトリレベルを一致させる場合、.
修飾子は次のように制限されます。定期的なファイルを変更し(GNUがgrep
行うように-r
)、Om
O
変更時間に基づいて逆順に並べ替えますm
(例ls -rt
:)。D
GNUのように隠された修飾子を見つけるには、grep
qualifiersを追加してください-r
。
-H
-r
(または同じGNU拡張子--include
)は、ファイルが1つしか見つからなくてもファイル名が印刷されることを保証しますzsh
。
印刷するにはセカンダリディレクトリファイルパスに加えて、GNUを使用してgrep
次のことができます。
for f (/home/user/level_1/*/level_3/*/level_5/**/script.js(N.Om))
grep -H --label=${f:h5:t} 'text in file' < $f
:h5
5が必要な場所はどこですか?h
電子ヘッドコンポーネント(/home/user/level_1/level_2
in)/home/user/level_1/level_2/and/more...
と:t
t
エア中( level_2
)。
タイムスタンプを含めるには、zshの組み込みstat
関数を使用して検索できます。
zmodload zsh/stat
for f (/home/user/level_1/*/level_3/*/level_5/**/script.js(N.Om)) {
stat -LF%FT%T.%3.%z -A t +mtime $f
grep -H --label="${f:h5:t} ($t)" 'text in file' < $f
}
ここのタイムスタンプはミリ秒精度の標準形式(例:2022-12-01T09:30:00.895+0000)で明示的にフォーマットされていますが、必要に応じてフォーマットを調整できます-F
(strftime()
フォーマットを使用)。