2016-09-20 2 views
-2

안녕하세요 내가 셸 프로그램 (코드는 아래에있다)에 문제가있어, 디렉토리에 sorg에서 dest로 파일을 복사해야하지만, 파일이 dest에 존재한다면, 나는 dest/중복, 프로그램이 당신을 도울 수, 작동하지 않습니다Errore 유닉스 프로그램 복사본을 폴더에서

#!/bin/sh 

sorg=$1 
dest=$2 
path=$3 

cd $sorg 

for i in *.jpg 
do 
    #controllo se il file esiste nella destinazione 
    if test -f "$dest/$i" 
    then 
     #il file esiste 
     mv $i "$dest/duplicati" 
    else 
     #il file non esiste 
     mv $i "$dest" 
    fi 

done 
+2

문제가 무엇입니까 (영어 코멘트 : 나 출신)? 오류를 게시하고, 도와 드리겠습니다. –

+0

프로그램이 폴더 sorg에서 dest –

+0

으로 파일을 복사하지 않습니다. 'duplicati' 디렉토리를 만드셨습니까? 그렇지 않으면 모든 파일을'duplicati'라는 동일한 파일로 옮깁니다. (파일에 너무 좋지 않습니다 ...) –

답변

1

쉘 내부에서 디렉토리를 변경하는 것은 좋지 않습니다. 입력 인수가 절대 경로가 아닌 경우 스크립트가 전혀 작동하지 않습니다. 현재 디렉토리에 inputoutput

예 :

sorg=input 
dest=output 

플러스, 당신은 따옴표 모든 작업을 보호해야하거나 다른 파일 이름이 어떤 경우인지 (그 안에 공백 문자가있는 경우 실패합니다, 따라 토론하기)

먼저 스크립트는 cd input을 수행합니다. dest은 상대적이므로 지금은 존재하지 않는 input/output을 가리 킵니다.

중 하나는, 절대 (매우 좋지 않다)로 인수를 변환하거나 난 당신의 코드가 너무 디렉토리가 더 이상 필요 변경하지 변경된 디렉토리 (가장 좋은 방법)

을 변경하는 것을 방지하기 위해 수정합니다. 문제는 입력 파일의 기본 이름을 계산하여 대상 이름을 계산하는 것입니다.

duplicati 디렉토리가 존재하지 않으면 재앙이 될 수도 있으므로 디렉토리 생성을 추가했습니다. 모든 중복 파일은 동일한 파일 duplicati!

#!/bin/sh 

sorg=$1 
dest=$2 
# this is not used, commenting out! 
# path=$3 

if [ ! -d "$dest/duplicati" ] ; then 
    mkdir "$dest/duplicati" 
    if [ $? != 0 ] ; then 
     # cannot create duplicate dir: bail out 
     exit 1 
    fi 
fi 

# scan jpg files from source directory 
for fpi in $sorg/*.jpg 
do 
    # compute basename from full source path 
    i=$(basename "$fpi") 
    #controllo se il file esiste nella destinazione 
    if test -f "$dest/$i" 
    then 
     #il file esiste  
     echo duplicate: moving $fpi to $dest/duplicati/$i   
     mv "$fpi" "$dest/duplicati/$i" 
    else 
     #il file non esiste 
     echo moving $fpi to "$dest/$i"  
     mv "$fpi" "$dest/$i" 
    fi 

done 
+0

나는 당신의 코드를 시도했지만 쉘은이 메시지를 출력한다. usage : mv [-f | -i | -n] [-v] 소스 대상 mv [-f | -i | -n] [-v] source ... –

+0

당신의 질문을 편집하여 당신의 주장을 보여줄 수 있습니까? 경로에 공백 문자가 있습니까? –

+0

내 경로에 공백 문자가 없습니다 –

관련 문제