過去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
zsh
GNUシステムでは、以下を使用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
)。