2010-11-19 5 views
5

변경 사항이있을 때마다 xyz.txt 파일의 변경 사항을보고 전체 파일을 전자 메일로 보내려고합니다. 이것을 위해 하나의 라이너 (또는 몇 줄의 쉘 스크립트)가 있습니까?변경 파일보기

업데이트 : 이제 누군가가 쉘 스크립트 또는 1 개 명령이 두 줄을 바인딩하는 방법을 보여줄 수 있다면

# Check if my.cnf has been changed in the last 24 hours 
# if yes, as in the following case, simply send the file 
# if it has not been changed in the last 24 hours, do nothing. 

# find /etc/ -name my.cnf -mtime 0 
/etc/my.cnf 

# cat /etc/my.cnf | mail [email protected] 

.

답변

4

이 시도 보내기

mail-E 옵션은 경우가 것처럼 (빈 몸으로 메시지를 전송하지 못하게
find /etc/ -name my.cnf -mtime 0 -exec sh -c 'cat {} | mail -E -s "file changed" [email protected]' \; 

경우 find 반환 값 없음과 cat 출력 아무것도

+0

-E 옵션은 메일 명령의 내 버전에 해당 될 것 같지 않습니다 – shantanuo

+1

@shantanuo : 여기에 출력이 비어 있지 않은 경우에만 배관 [약 슈퍼 사용자에 대한 질문입니다 ] (http://superuser.com/q/210054/310). –

6

파일이나 디렉토리를보고 변경 사항을보고 할 수있는 inotify을 조사해야합니다.

+0

+1 링크 – GuruM

18

inotifywait을 사용할 수 있습니다. 파일 변경을 기다린 다음 명령을 실행합니다 (예 : msmtp).

-2
#!/bin/ksh 

ls -lt /usr/tip30/prtfile/asb270.prt|awk '{print $6$7$8}'|awk -F: '{print $1$2}' 
> /tmp/lastupdated.temp 
read input_pid < /tmp/lastupdated.temp 
echo "$input_pid" 

while [ "$input_pid" -eq "`ls -lt /usr/tip30/prtfile/asb270.prt | awk '{print $6 
$7$8}'|awk -F: '{print $1$2}'`" ]; do 
    echo "file has not changed " 
    sleep 30 
done 
echo "file changed `ls -lt /tmp/lastupdated.temp`" 
rm /tmp/lastupdated.temp 
+1

코드 형식을 지정하십시오/이것이 왜 문제를 해결하는지 설명해주십시오. –

1
.

inotify-hookable은이 목적으로 사용하기가 쉬운 펄 스크립트입니다 (예 :

). 파일에 대한

-f는 명령이

을 실행하는 데 내가 너무 원격 컴퓨터에서 파일을보고했다 -c를 볼 수 있지만, 완성 된 inotify를-hookable 감시 파일이되기 전에 삭제 된 경우 업데이트되었습니다.

데비안에서 설치했습니다. CPAN 링크 : https://metacpan.org/pod/App::Inotify::Hookable