웹사이트에 액세스하는 방법(사용자 이름과 비밀번호 필요)과 .csv.gz로 끝나는 모든 파일의 전체 웹사이트 링크를 .txt 파일(한 줄에 한 줄)로 추출하는 방법입니다. 하위 폴더에서 데이터를 추출하고 싶지 않습니다.
예를 들어 다음 내용을 my.txt에 저장하고 싶습니다.
http://www.google.com/1.csv.gz
http://www.google.com/xyz.csv.gz
하지만 저장하면 안 된다
http://www.google.com/extra/abc.csv.gz
답변1
FTP 및 기타 프로토콜과 달리 HTTP 프로토콜에는 모든 파일 목록을 "가져오는" 기능이 없습니다. 파일을 가져오려면( GET
) 해당 URL을 알아야 합니다.
많은 웹 서버는 서버의 해당 디렉토리에 존재하는 각 URL에 대한 양식에 대한 링크 목록이 포함된 URL에 대한 HTML 페이지를 생성하는 편리한 기능(종종 자동 색인 생성이라고 함)을 제공하여 http://site/directory/
일종의 의사 파일을 제공합니다. 고객이 발견할 수 있는 목록을 만드세요. 그러나 이 기능은 사이트의 최상위 디렉터리( )에서는 거의 사용되지 않습니다. 왜냐하면 사이트 작성자는 일반적으로 사이트의 최상위 URL에 대해 명시적인 HTML 페이지를 제공하기 때문입니다. 따라서 존재하는 경우 사전에 그 존재를 알지 않으면 일반적으로 찾을 수 없습니다.http://site/directory/file
file
http://site/
http://www.google.com/1.csv.gz
만약에파일 색인을 제공하는 웹 서버를 다루고 있는 경우 목록을 HTML에서 텍스트로 쉽게 변환하고 이를 awk
사용하거나 사용하지 않고 일부 텍스트 처리를 수행할 수 sed
있지만 이는 특정 웹 서버의 정확한 형식에 따라 달라집니다. HTML 목록 반환 중 ...
curl http://site/ | sed -e [....]
답변2
나는 당신이 원하는 모든 파일이 사이트의 색인 페이지에 나열되어 있다고 가정합니다. 그렇다면 텍스트 브라우저를 사용할 수 있습니다.살쾡이해당 페이지에서 찾은 URL 목록을 덤프한 다음 sed를 사용하여 원하는 URL을 추출하세요. 예를 들어:
lynx -auth=ID:PASSWD -dump http://www.google.com |
sed '1,/^References/d
\:www\.google\.com/[^/]*\.csv\.gz$:!d
s/^ *[^ ]* //
' >my.txt
sed는 마지막 참조 목록(예: URL 링크)까지 모든 줄을 삭제합니다(d). 그런 다음 패턴과 일치하지 않는 줄을 제거합니다( 대신 \:
새 패턴 구분 기호를 도입하여 이스케이프하지 않고 패턴에서 /를 사용할 수 있습니다). 를 제외한 모든 문자와 일치합니다 . 줄의 끝입니다. 그런 다음 lynx가 URL에 사용한 번호를 제거합니다.:
/
[^/]*
/
$