1

多数のファイルを含むディレクトリがあります。少なくとも 1 つのファイルにあるテキストを検索しようとしています。テキストは、最近のファイルの 1 つにある可能性があります。これを行うコマンドは何ですか?のようになると思いましたls -t | head -5 | grep abaaba

たとえば、ファイル 1、ファイル 2、ファイル 3、ファイル 4、ファイル 5 から 5 つのファイルが返された場合ls -t | head -5、どのファイルに が含まれているかを知る必要がありますabaaba

4

2 に答える 2

3

あなたがやろうとしていることは本当に明確ではありません。しかし、効率があなたの主な目標であると思います。私は次のようなものを使用します:

ls -t | while read -r f; do grep -lF abaaba "$f" && break;done

これにより、文字列を含む最初のファイルのみが出力され、検索が停止します。実際の行を見たい場合は、-l の代わりに -H を使用してください。また、単なる string drop -F の代わりに正規表現を使用すると、grep の実行が遅くなります。

ls -t | while read -r f; do grep -H abaaba "$f" && break;done

もちろん、検索を続けたい場合は、"&& break" を削除することをお勧めします。

ls -t | while read -r f; do grep -HF abaaba "$f";done

時間枠についていくつかのアイデアがある場合は、検索を試みることをお勧めします。

find . -maxdepth 1 -type f -mtime -2 -exec grep -HF abaaba {} \;

過去 2 日以上をカバーするために、-mtime の後に数値を上げることができます。

于 2015-07-22T23:53:43.337 に答える
0

これを対話的に行っているだけで、ファイル名にスペースが含まれていないことがわかっている場合は、次のことができます。

grep abaaba $(ls -t | head -5)   # DO NOT USE THIS IN A SCRIPT

これを別名で書く場合、または将来繰り返し使用する場合は、より多くの入力が必要な「適切な」方法で行いますが、ファイル名のスペースやその他のもので壊れることはありません。

于 2015-07-23T10:33:45.740 に答える