シェルスクリプトの新機能です。以下の質問を参考にすれば嬉しいです。Linux:入力ファイルにファイルパス名が既に存在する場合は、グロッピングファイルをスキップしてください
私は何千ものフォルダ/サブフォルダとファイルをディレクトリ~/home/dir
の下に置いており、常に新しいファイルが追加されています。 (残念ながら、追加される新しいファイルのタイミングはランダムです)。
このフォルダでは、追加された新しいファイルのみをgrepします。どのファイルが新しく、どのファイルが古いかを知るために、前のgrepアクションから、すでにpath.txt
という名前のtxtファイルにグレープされたファイルのパス名をディレクトリ~/home
に保存します。 path.txtファイルで例えば
、私はこの
/home/dir/b1/file50.txt
/home/dir/abc/file52.txt
/home/dir/det/file539.txt
/home/dir/br/com_file6551.txt
/home/dir/n12/d2/c_file251.txt
/home/dir/fg/file51.txt
etc etc..
のようなものを持っている場合は、ファイルように私は、grepのへの入力としてpath.txt
ファイルからのパス名を渡すことができる方法はありますpathnameはすでに存在していて、そのファイルをグリップしません。
これらの古いファイルをグロッピングするのをスキップする他の簡単な方法はありますか?
いいえ、「grep」は除外リストを使用しません。 'find'のようなものを使ってファイルリストを生成し、 'fgrep -v -x -f path.txt'にパイプし、' xargs grep pattern'にパイプする必要があります。 – Barmar
'find'を使っているならば、' -newer'オプションを使って、除外リストを使うのではなく、タイムスタンプファイルより新しいファイルを選ぶことができます。 – Barmar
@ Barmar、fgrepなどの検索と配管の使用をお勧めします。 現在、スクリプトを使用して毎回すべてのファイルにgrepパターンがありますが、それは効率的ではないと思います。 "find"を使用して私はまだすべてのファイルを探していますが、fgrep -vはパス名の逆マッチングを試みていて、新しいものに基づいて、それらの新しいファイルでのみパターンの別のxargs grepを見つけます。 重要な質問:これは、すべてのファイルを単純にグロッピングする現在の方法よりも本当に効率的ですか? –