異なるイベント間のいくつかのファイル名を含むログファイルがあるため、サブフォルダーにある必要があります。特定のフォルダとサブフォルダに存在する必要があるxmlファイル内のファイル名にも同じニーズが適用されます。ログファイルにgrepを使用し、正確なファイル名を抽出してクエリに提供する必要があるようです。 1行にファイル名のリストを簡単に取得できますが、findで作業することは正確には機能しません。インターネットはその逆の答えでいっぱいです。 grepと入力した結果を見つけます。
grep -oP '(?<=Some problem with file named ).*pdf(?=\.)' /home/myname/log/myspecificlogfile.log
このコマンドの結果をxargsにパイピングしてみましたが、実際には存在しないファイルと実際に存在するファイルの両方から結果が出ませんでした。 echo単純化するために、findパラメータ-lsはまだ追加されていません(しかし必要です)。
echo 12345.pdf | xargs -0 -I{} find /home/myname/workfolders/ -name '{}' #Nonexisting pdf
echo 67890.pdf | xargs -0 -I{} find /home/myname/workfolders/ -name '{}' #Existing pdf, no results
フォルダとサブフォルダ内のファイルを見つけるためにgrepの結果をどのようにパイプできますか?
答え1
私はそれをします:
grep -oP '(?<=Some problem with file named ).*pdf(?=\.)' \
/home/myname/log/myspecificlogfile.log | awk -F / '
ARGIND == 1 {files[$0]; next}
$NF in files' - RS='\0' <(
find /home/myname/workfolders/ -name '*pdf' -type f -print0)
grep
(とのGNUの実装と、または同じawk
プロセス置換をサポートするシェルを仮定)。ksh
zsh
bash
find
たとえば、ファイル名や 'を使用することは適切ではありません-name
。ファイル名ごとに1回実行するのは非効率的です。の呼び出しを使用するソリューションを作成しても、実行中のハッシュ検索よりも効率が悪くなる可能性があります。*.pdf
?.pdf
find
find
-name a.pdf -o -name b.pdf...
awk
答え2
使用される他の変形検索+グレブ
find /home/myname/workfolders/ \
-name '*pdf' -type f -exec grep -qFf \
<(grep -oP '(?<=Some problem with file named ).*pdf?(?=\.)'\
/home/myname/log/myspecificlogfile.log) \
-print
または、2つのコマンドにパイプすることもできます。
find /home/myname/workfolders/ -name '*pdf' -type f |
grep -qFf <(grep -oP '(?<=Some problem with file named ).*pdf?(?=\.)' \
/home/myname/log/myspecificlogfile.log)