일부 예외를 제외하고 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).

관련 정보