curl을 사용하여 FTP를 통해 여러 파일 업로드


14

curl을 사용하여 FTP를 통해 현재 폴더 내의 모든 텍스트 파일을 서버 위치에 업로드하려고합니다. 나는 다음 줄을 시도했다.

 curl -T "{file1.txt, file2.txt}" ftp://XXX --user YYY

여기서 XXX는 서버의 IP 주소이고 YYY는 사용자 이름 및 비밀번호입니다.

file1.txt를 서버로 성공적으로 전송할 수 있지만 'file_name'을 열 수 없습니다! '라는 두 번째 파일에 대해 불평합니다.

파일 이름을 바꾸었고 file1.txt가 아닌 file2.txt에서 작동했습니다. 구문에 문제가있는 것 같습니다. 그러나 이것이 매뉴얼이 말하는 것입니까?

또한 이상적으로는 다음과 같은 작업을 수행 할 수 있습니다.

 curl -T *.txt ftp://XXX --user YYY

현재 폴더의 txt 파일 이름이나 전송할 파일 수를 항상 알 수 없기 때문입니다.

나는 ls *.txt배열 의 출력을 수집하고 curl에 필요한 여러 파일 형식으로 넣는 bash 스크립트를 작성해야 할 수도 있다고 생각 합니다.

나는 bash 스크립팅을 한 적이 없다-이것이 이것을 달성하는 가장 간단한 방법입니까?

답변:


20

첫 번째 명령은 공백없이 작동해야합니다.

curl -T "{file1.txt,file2.txt}" ftp://XXX/ -user YYY

또한 위 URL에서 후행 "/"에 유의 하십시오.

옵션 "-T"에 대한 curl의 수동 항목입니다.

-T,-업로드 파일

지정된 로컬 파일을 원격 URL로 전송합니다. 지정된 URL에 파일 부분이 없으면 Curl은 로컬 파일 이름을 추가합니다. 컬이 실제로 파일 이름이 없음을 컬에 나타내려면 마지막 디렉토리에서 후행 /를 사용해야합니다. 또는 컬은 마지막 디렉토리 이름이 사용할 원격 파일 이름이라고 생각할 것입니다. 업로드 작업이 실패 할 가능성이 높습니다. 이것이 HTTP (S) 서버에서 사용되면 PUT 명령이 사용됩니다.

주어진 파일 대신 stdin을 사용하려면 파일 이름 "-"(단일 대시)를 사용하십시오. 또는 파일 이름 "." stdin을 업로드하는 동안 서버 출력을 읽을 수 있도록 비 차단 모드에서 stdin을 사용하도록 "-"대신 (단일 기간)을 지정할 수 있습니다.

명령 행에서 각 URL에 대해 하나의 -T를 지정할 수 있습니다. 각 -T + URL 쌍은 업로드 대상과 위치를 지정합니다. curl은 또한 -T 인수의 "globbing"을 지원합니다. 즉, 다음과 같이 URL에서 지원되는 동일한 URL globbing 스타일을 사용하여 단일 URL에 여러 파일을 업로드 할 수 있습니다.

curl -T "{file1,file2}" http://www.uploadtothissite.com

또는

curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/

curl은 URL과 동일한 구문 만 지원하므로 "* .txt"확장이 작동하지 않습니다 .

다음과 같이 중괄호 안에 부품 세트를 작성하여 여러 URL 또는 URL의 일부를 지정할 수 있습니다.

http : // site . {one, two, three} .com

또는 다음과 같이 []를 사용하여 영숫자 시리즈의 시퀀스를 얻을 수 있습니다.

ftp://ftp.numericals.com/file[1-100].txt

ftp://ftp.numericals.com/file [001-100] .txt (제로 0)

ftp://ftp.letters.com/file[az].txt

[...]

명령 행 프롬프트에서 호출 될 때 [] 또는 {} 시퀀스를 사용하는 경우 쉘이이를 방해하지 않도록 전체 URL을 큰 따옴표로 묶어야합니다. '&', '?'와 같이 특수하게 취급되는 다른 문자도 마찬가지입니다. 그리고 '*'.

그러나 다음과 같이 "일반"쉘 글 로빙을 사용할 수 있습니다.

curl -T "{$(echo *.txt | tr ' ' ',')}" ftp://XXX/ -user YYY

(마지막 예제는 모든 셸에서 또는 다른 종류의 이국적인 파일 이름으로 작동하지 않을 수 있습니다.)


$(perl -e 'print join(",",@ARGV)' *.txt)공백이있는 파일 이름을 올바르게 처리합니다.
ivan_pozdeev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.