2013-07-20 1 views
0

주어진 시간보다 오래된 파일에 대한 특정 경로를 검색하는 스크립트를 작성하려고합니다. 인자리스트의 길이 때문에 나는 이것을 직접적으로하지는 않지만 발견 된 파일을리스트에 쓴다. 두 번째 단계에서는이 목록을 가져 와서 해당 파일을 tar로 가져오고 나중에 타르 목록을 읽고 원본 디렉터리에 보관 된 파일을 삭제합니다. 파일 찾기 (목록 파일에서 인쇄) tar이 목록, 보관 확인 및 소스 삭제

특정 파일을 찾아 목록 쓰기 :이 최대한 멀리 볼 수 올바른 작동

find /path/to/*/xfiles/* -type f -mtime +8 -print > /tmp/archiv-xfiles.manifest 

f를 추가 타입 :
솔루션. 파일 목록은 각각의 실행마다 다르지만, mtime은 상대적으로 작동하는 mtime을 사용하는 효과가 있습니다. 이제 목록을 가져 와서 목록에있는 파일을 타르면됩니다.

tar -czvPf /tmp/archiv-xfiles.tar.gz --files-from /tmp/archiv-xfiles.manifest 

이 시점에서 각 파일을 3 번 포함하는 아카이브가 붙어 있습니까? 인쇄 된 매니페스트 목록은 정확하며 각 파일은 한 번만 나타납니다. 내가 사악한가?

내가 그런 식으로 갈 것이지만 :

tar -tvf /tmp/archiv-xfiles.tar.gz > /tmp/archiv-xfiles-to-delete.manifest 

는 너무 비 손상된 아카이브의 확인하기 위해 여기에 에러 체크가 필요하십니까?

diff /tmp/archiv-xfiles.manifest /tmp/archiv-xfiles-to-delete.manifest > /dev/null 
v1=$? 
if [ $v1 == 0 ] ; then 

이제 두 가지 방법, 첫 번째 방법을 봅니다. 어느 것이 더 빠르다?

cat /tmp/archiv-xfiles-to-delete.manifest | xargs rm -rf 

또는 두 번째 :

while read line 
do 
rm -f $line   
done < /tmp/archiv-xfiles-to-delete.manifest 

낫다 어느 몰라? 스위치 tar --remove-files 스위치를 사용하는 것이 좋지 않거나 아이디어를 저장하지 않습니까?
그리고 나머지는 : 전체 스크립트에 어떤 아이디어가 정말 감사합니다 동안

rm -f /tmp/archiv-xfiles.manifest 
rm -f /tmp/archiv-xfiles-to-delete.manifest 
elif 
echo ERROR, check manifest files! | mail -s ScriptError [email protected] 
fi 

은 아마도 누군가가 어떤 목록을 tarring으로 잘못되어 가고 말해 수 있습니다. 예를 들어 tar 옵션 인 "--remove-files"는 tar 내용을 나열하고 diff 및 delete하는 것과 동일한 효과를 얻기 위해 저장하고 신뢰할 수있는 방법입니까?

답변

1

1) 목록을 tarring하는 경우 : 목록에 파일과 dir이 모두 포함되어 있기 때문에 추가 코드를 얻고있을 가능성이 높습니다. 파일 만 얻으려면 '-type f'를 find 명령에 추가하십시오.

2) 인수 목록 길이는 xargs를 사용하는 지점 중 하나가 정확히 처리합니다. 당신은 단지, 난 정말 당신이 목록을 생성 할 것입니다 이유를 실패

find ..... -print0 | xargs rm 

3

를) 할 파일을 타르 타르 아카이브에서 다시 동일한 목록을 다시 생성 할 수있다.

+0

1) Yesss가 도움이 되었습니까? 좋은 생각인데 왜이 스위치를 생략하면 두 배가 아닌 tripple 파일이 생기는 걸까요? 2) xargs를 사용했지만 tar가 30,000 개가 넘는 파일에서 비정상적인 동작을하기 때문에 불완전한 아카이브가 붙어 있습니다. 3) mtime은 호출 된 두 번째 파일에 상대적으로 작동하기 때문에 두 번째 호출에서 이전에 호출 한 파일보다 많은 파일을 삭제합니다.왜냐하면 파일은 문서화에 매우 중요하기 때문에 아카이브 파일을 나열하는 것이 손상되지 않은 아카이브의 shure가 될만큼 충분히 테스트되는지 궁금합니다. – peet

+0

1) 아마도 dir 및 parent dir과 일치하는 파일입니다. 2) 타르 아카이브는 30000 개의 파일에 문제가 없어야합니다. 수백만 명의 사용자가있는 http://stackoverflow.com/questions/2697213/more-efficient-way-to-find-tar-millions-of-files를 참조하십시오. 3) 알 겠어. 따라서 tar 파일은 단지 부산물이 아니므로 유용합니다. 4) -W 타르 선택권 (http://www.gnu.org/software/tar/manual/html_section/verify.html) – Tiago

+0

1) 나는 2) 나는/bin/tar로 끝났다 : 인수 목록 너무 긴 3) 나는 그것의 생각하지만 다른 dir (또는 스크립트에서 독립적 인 더 나은 dir)에서 일하는 동안 루트에서 일할 필요가 있는지 확인하고 어떻게 든 diff 방법을 좋아해. :) – peet