배경:이 문제를 일으킨 구체적인 질문은 다음과 같습니다. 저는 슬랙웨어 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 --delete
slackbuilds.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
.