쉘 내부에서 디렉토리를 변경하는 것은 좋지 않습니다. 입력 인수가 절대 경로가 아닌 경우 스크립트가 전혀 작동하지 않습니다. 현재 디렉토리에 input
및 output
와
예 :
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
문제가 무엇입니까 (영어 코멘트 : 나 출신)? 오류를 게시하고, 도와 드리겠습니다. –
프로그램이 폴더 sorg에서 dest –
으로 파일을 복사하지 않습니다. 'duplicati' 디렉토리를 만드셨습니까? 그렇지 않으면 모든 파일을'duplicati'라는 동일한 파일로 옮깁니다. (파일에 너무 좋지 않습니다 ...) –