特定の単語まで/スクリプトで見つけた後にすべてを切り取る方法

特定の単語まで/スクリプトで見つけた後にすべてを切り取る方法

今日の内容を手に入れようとしています"ERROR"

私はこれを使って目的のファイルを見つけます。

find /home/user/logfilesError/ -maxdepth 1 -type f -name "gandalf_*"\
   -daystart -mtime -1 -exec grep -rl "ERROR" "{}" +

現在の出力(エラーが見つかった場合):

/home/user/logfilesError/gandalf_123.log

しかし、私が望む出力はログファイル名だけです。

gandalf_123.log

メッセージ:パスが頻繁に変わるため、前の文字を切り取ることはできません。

ご協力ありがとうございます!

ベストアンサー1

このbasenameツールはファイル名の前のパスを削除できます。

find /home/user/logfilesError/ -maxdepth 1 -type f -name "gandalf_*"\
-daystart -mtime -1 -exec grep -rl "ERROR" "{}" + | xargs -n 1 basename

希望の出力を提供します。

-n 1xargsデフォルト名として1つの引数のみを使用するように指示します。したがって、より多くを受信すると、basename各パラメータのプロセスが生成されます。basename引数としてファイル名のみが必要なので、これは必須です。

ファイル名にスペースが含まれていると、このコマンドは機能しません。この場合は、@HaukeLagingが提案したように、次のようにしてください。

find /home/user/logfilesError/ -maxdepth 1 -type f -name "gandalf_*"\
-daystart -mtime -1 -exec grep -rl "ERROR" "{}" + | xargs -n 1 -d \\n basename

ただし、ファイル名に改行文字が含まれていると機能しません。

おすすめ記事