今日の内容を手に入れようとしています"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 1
xargs
デフォルト名として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
ただし、ファイル名に改行文字が含まれていると機能しません。