주어진 시간보다 오래된 파일에 대한 특정 경로를 검색하는 스크립트를 작성하려고합니다. 인자리스트의 길이 때문에 나는 이것을 직접적으로하지는 않지만 발견 된 파일을리스트에 쓴다. 두 번째 단계에서는이 목록을 가져 와서 해당 파일을 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) Yesss가 도움이 되었습니까? 좋은 생각인데 왜이 스위치를 생략하면 두 배가 아닌 tripple 파일이 생기는 걸까요? 2) xargs를 사용했지만 tar가 30,000 개가 넘는 파일에서 비정상적인 동작을하기 때문에 불완전한 아카이브가 붙어 있습니다. 3) mtime은 호출 된 두 번째 파일에 상대적으로 작동하기 때문에 두 번째 호출에서 이전에 호출 한 파일보다 많은 파일을 삭제합니다.왜냐하면 파일은 문서화에 매우 중요하기 때문에 아카이브 파일을 나열하는 것이 손상되지 않은 아카이브의 shure가 될만큼 충분히 테스트되는지 궁금합니다. – peet
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
1) 나는 2) 나는/bin/tar로 끝났다 : 인수 목록 너무 긴 3) 나는 그것의 생각하지만 다른 dir (또는 스크립트에서 독립적 인 더 나은 dir)에서 일하는 동안 루트에서 일할 필요가 있는지 확인하고 어떻게 든 diff 방법을 좋아해. :) – peet