2010-03-08 3 views
3

정기적으로 웹 서버의/tmp 디렉토리에 파일을 저장하여 공유하고 싶습니다. 짜증나는 것은 파일을 scp 할 때마다 권한을 설정해야한다는 것입니다.bash에서 scp와 chmod가있는 파일 이름 사용

#!/bin/bash 

scp "$1" SERVER:"/var/www/tmp/$1" 
ssh SERVER chmod 644 "/var/www/tmp/$1" 
echo "URL is: http://SERVER/tmp/$1" 

내 실제 호스트 서버를 교체, 모든 것이 기대 작품으로까지 ... : URL이 내가 파일을 통해, 다음 사용 권한을 설정하고 복사하는 스크립트를 작성했습니다 another question에서 조언을 인쇄합니다 다음 공백을 포함하는 인수를 사용하여 스크립트를 실행합니다. 솔루션이 $ @를 사용하는 것으로 의심 되긴하지만, 간격 파일 이름을 얻는 방법을 아직 알지 못했습니다.

답변

4

그것은 필요한 것은 경로를 탈출하는 것입니다 것으로 나타났다을하는 원격 서버로 전송됩니다. Bash는 SERVER : "/ var/www/tmp/$ 1"의 인용문이 $ 1과 관련되어 있으며 최종 출력에서 ​​제거한다고 생각합니다. 내가 실행하려고하면 :

scp SERVER:/var/www/tmp/Screen shot 2010-02-18 at 9.38.35 AM.png 

대신 따옴표를 이스케이프 리터럴은 다음 scp 명령은 당신이 기대하는 것보다 보이는 경우 :

tmp-scp.sh Screen\ shot\ 2010-02-18\ at\ 9.38.35\ AM.png 

반향 우리는 그것을 실행하려고 참조

코드를 추가하면
scp SERVER:"/var/www/tmp/Screen shot 2010-02-18 at 9.38.35 AM.png" 

최종 스크립트가되는 경로 절단하기 :

#!/bin/bash 

# strip path 
filename=${1##*/} 
fullpath="$1" 

scp "$fullpath" SERVER:\"/var/www/tmp/"$filename"\" 
echo SERVER:\"/var/www/tmp/"$filename"\" 
ssh SERVER chmod 644 \"/var/www/tmp/"$filename"\" 
echo "URL is: http://SERVER/tmp/$filename" 
0

스크립트가 올바르게 보입니다. 공간

scp-chmod.sh "filename with spaces" 

또는 탈출 : 내 생각 엔 당신이 당신의 스크립트에 전달할 때 파일 이름을 인용 할 필요가 있다는 것입니다

scp-chmod.sh filename\ with\ spaces 
-5

파일 이름의 공백을 신경 쓰지 않고도 쉽게 인용 할 수있는 방법은 파일 이름을 바꾸어 옮기기 전에 공백을 제거하는 것입니다. 또는 파일을 만들 때 공백을 사용하지 마십시오. 파일의 이름을 지정할 때마다이를 "모범 사례"로 만들 수 있습니다.

관련 문제