いくつかの例外を除いて、Linuxでファイルを探す

いくつかの例外を除いて、Linuxでファイルを探す

過去24時間に変更されたすべてのファイルを検索するコマンドを作成しようとしていますが、各public_htmlディレクトリを通過するループがあるPHPだけで、毎日確認できるように出力をHTMLファイルに保存します。

 for i in `ls /var/cpanel/users`; 
 do find /home/$i/public_html -type f -ctime -1 -exec ls -ls {} \; > 
 /home/demo4/public_html/output.html;
 done;

しかし、うまくいかず、出力が正しくありません。これは1つのアカウントの出力なので、すべてのアカウントで機能する必要があります。

0 -r-xr-xr-x 1 ziaengg ziaengg 0 Jan 12 15:16 /home/ziaengg/public_html/modules/mod_rsflashmatic/xml/rsflashmatic_93.xml 23320 -rw-r--r-- 1 ziaengg ziaengg 23851008 Jan 12 15:25 /home/ziaengg/public_html/error_log

また、結果を特定のIDで電子メールで送信する方法も知りたいです。

キーワードを含むファイルを除外するには、どのパラメータを追加する必要がありますかcache?私はこれに本当に新しいものです。

答え1

努力する:

cd /var/cpanel/users &&
for i in *
do
    find "/home/$i/public_html" -type f ! -iname '*cache*' -ctime -1 -ls 
done > /home/demo4/public_html/output.html

メモ:

  • >>代わりに使用してください>。それ以外の場合、各反復は最後の出力を上書きします。または、ループ全体の出力をリダイレクトする場合>
  • 一部の実装には非常によく似たオプションfindがあるため、可能であればそれを使用してください。-ls-exec ls -ld {} \;
  • 演算子を使用!して検索を無効にします。! -iname '*cache*'
  • find非標準-iname述語をサポートしていない場合は、-name '*[cC][aA][cC][hH][eE]*'代わりにその述語を使用してください。
  • これはユーザー名なので使用できますfor i in $(ls ..)が、より安全使用for i in *

答え2

zshGNUシステムでは、以下を使用uconvしますrecode

{ echo '<html><head><meta charset="UTF-8"</head><body><pre>'
  users=(/var/cpanel/users/*(:t)) &&
    find /home/$^users/public_html -type f -ctime -1 ! -iname '*cache*' -ls |
    uconv --from-callback escape-c -f utf8 -t utf8 |
    recode u8..html
  echo "</pre></body></html>"
} > /home/demo4/public_html/output.html

recode(ただし、U+FFFF以上の文字はサポートされませんのでご注意ください)

<文字または8ビットバイト値を含むファイル名に関する問題を回避するには、これらの追加のuconv / recodeステップが必要です&(ここでは、ファイル名がUTF-8でエンコードされていると仮定します(無効な文字の場合は、そのバイト値を表示\xAB)。

関連情報