rsync-like --delete 기능 및 wget(wget의 --delete-after 아님)

rsync-like --delete 기능 및 wget(wget의 --delete-after 아님)

배경:이 문제를 일으킨 구체적인 질문은 다음과 같습니다. 저는 슬랙웨어 Linux 사용자이며 2019년 3월 23일에 다음 명령을 사용하여 배포판을 미러링했습니다.

wget -r -np -R "index.html*" https://mirror.slackbuilds.org/slackware/slackware64-current/

-N그러다가 최근인 2019년 8월 29일에 위 명령에 로컬 미러를 새로 고치거나 업데이트하는 옵션을 추가했습니다 . 그러나 이로 인해 동일한 패키지의 이전 버전과 새 버전의 "중복"이 많이 포함된 이미지가 생성되었습니다.

SDL2_mixer-2.0.4-x86_64-1.txz
SDL2_mixer-2.0.4-x86_64-2.txz
libcddb-1.3.2-x86_64-5.txz
libcddb-1.3.2-x86_64-6.txz

잠깐만 (내 말은위치대기 중 :)

질문:그래서 내가 정말 하고 싶은 일은

rsync -av --delete https://mirror.slackbuilds.org/slackware/slackware64-current/ my-slackware64-mirror-directory/

그러면 rsync --deleteslackbuilds.org에 더 이상 존재하지 않는 미러 디렉터리에서 이전 버전이 자동으로 제거됩니다. 그러나 나는 slackbuilds에 어떤 종류의 계정도 갖고 있지 않으므로 (내가 아는 한) rsync를 실행하여 파일을 가져올 수 있는 방법이 없습니다. 동일한 작업을 수행할 수 있는 wget 메서드가 있습니까? 아니면 어떤 방법이 있나요? 감사해요.


편집: @roaima의 의견에 대한 긴 응답...
    @roaima님, 조언해주셔서 감사합니다. 당신이 언급했으므로 예, 최상위 디렉토리에 FILELIST.TXT라는 이름의 파일이 있지만 현재 목록 대신 이전 파일을 삭제하는 일부 프로세스에 대한 입력으로 이 파일을 사용하는 방법을 잘 모르겠습니다. 맨페이지나 이 작업을 수행하는 방법을 설명하는 내용을 알려 주실 수 있나요? 다시 한 번 감사드립니다.

또한 FILELIST.TXT의 형식은   ls -al   프로그램 구문 분석을 수정하는 가장 쉬운 방법이 아닐 수도 있습니다(비록 작은 C 프로그램을 작성하여 적절한 형식으로 변환할 수는 있지만). 파일의 일부 일반적인 줄은 다음과 같습니다.

-rw-r--r--  1 root root   1637708 2019-08-15 18:06 ./slackware64/a/bash-5.0.009-x86_64-1.txz
-rw-r--r--  1 root root       163 2019-08-15 18:06 ./slackware64/a/bash-5.0.009-x86_64-1.txz.asc
-rw-r--r--  1 root root       226 2018-10-17 03:06 ./slackware64/a/bin-11.1-x86_64-3.txt
-rw-r--r--  1 root root     39576 2018-10-17 03:06 ./slackware64/a/bin-11.1-x86_64-3.txz
-rw-r--r--  1 root root       163 2018-10-17 03:06 ./slackware64/a/bin-11.1-x86_

분명히 선견지명이 있는 제안과 매우 관련이 있으며 파일의 처음 몇 줄은 설명입니다.

Wed Aug 28 21:44:15 UTC 2019
Here is the file list for this directory.  If you are using a 
mirror site and find missing or extra files in the disk 
subdirectories, please have the archive administrator refresh
the mirror.

답변1

면책조항: 현재 제가 제안한 코드를 테스트할 수 없습니다. 항상 그렇듯이 이 코드를 올바른 스크립트로 작성하기 전에 주의 깊게 테스트하십시오.

패키지 목록이라는 점을 고려하면(공백 등이 없는 간단한 파일 이름이 있음) 매우 간단한 코드를 사용하여 파일 이름을 선택할 수 있습니다.

# Get last item from each line of FILELIST
awk '{print $NF}' FILELIST | sort >weblist

# Generate a list of your files
find -type f -print | sort >mylist

# Compare results
comm -23 mylist weblist >diffs

# Remove old files
xargs -r echo rm -fv <diffs

보시다시피 작업을 수행 echo하려면 마지막 항목을 제거해야 합니다.rm

또한 다음에 이미지를 업데이트하려는 경우 이 comm줄을 수정하여(두 개의 파일 매개변수를 교체하여) 업데이트할 파일 세트를 찾을 수 있습니다.아니요소유하고 먹이세요 wget.

관련 정보