
저는 bash 스크립팅에 서툴러서 다음과 관련해 도움이 필요합니다.
#!/bin/bash
if [ -e Pretty* ];then
ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 /home/xbmc/TV/Pretty_Little_Liars/ Pretty*
else
echo "No new folders"
fi
find -depth -type d -empty -exec rmdir {} \;
여기서 문제는 ncftpput 라인입니다. 대신 간단한 [ echo "working" ]을 수행하면 모든 것이 정상이지만 ncftpput-line을 시도하면 [ line 5: [: 너무 많은 인수]가 표시됩니다.
ncftpput 명령만으로도 잘 작동합니다.
어떤 아이디어가 있나요?
답변1
너무 많은 인수 오류를 발생시키는 둘 이상의 결과를 반환할 가능성이 높기 때문에 -e
내부 에서 globbing을 사용할 수 없습니다 .[]
당신은 시도 할 수 있습니다:
shopt -s nullglob
if [[ -n "$(echo Pretty*)" ]]
또는
if [[ "$(echo Pretty*)" != "Pretty*" ]]
또한 들여쓰기, 공백 및 줄 연속을 사용하여 코드를 더 읽기 쉽게 만듭니다.
#!/bin/bash
shopt -s nullglob
if [[ -n "$(echo Pretty*)" ]]; then
ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 \
/home/xbmc/TV/Pretty_Little_Liars/ Pretty*
else
echo "No new folders"
fi
find -depth -type d -empty -exec rmdir {} \;
답변2
시도 해봐.
#!/bin/bash -x
if [ -e "Pretty*" ];then
`ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 /home/xbmc/TV/Pretty_Little_Liars/ Pretty*`
else
echo "No new folders"
fi
find -depth -type d -empty -exec rmdir {} \;
답변3
글쎄요, 인수가 너무 많다고 불평한다면 for를 사용하여 중단하세요.
#!/bin/bash
if [ -e Pretty* ];then
for FILE in Pretty*
do
ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 /home/xbmc/TV/Pretty_Little_Liars/ "$FILE"
done
else
echo "No new folders"
fi
find -depth -type d -empty -exec rmdir {} \;
$FILE 주위에 ""를 사용하면 이름에 공백이 있는 파일이 예상치 못한 작업을 수행하지 않도록 할 수 있습니다.