쉘 스크립트를 사용하여 이름에 공백이 있는 파일 복사

쉘 스크립트를 사용하여 이름에 공백이 있는 파일 복사

이 스크립트를 사용하여 공유 디렉터리의 모든 파일을 다른 디렉터리로 전송합니다.

cd /share
while :
do
  for allfiles in $(find /share/ -maxdepth 1 -type f -iname "*" -mmin +1);
do
  sudo mv "$allfiles" /schoolstore/
  done
  sleep 15s
done

하지만 파일 이름에 공백이 포함되어 있으면 오류가 발생합니다. 모든 파일 이름에 작동하도록 스크립트를 어디에서 수정해야 합니까?

답변1

내 의견에 언급된 다른 질문을 바탕으로 내 제안은 다음과 같습니다(테스트되지 않음).

cd /share

do
  for allfiles in $(find /share/ -maxdepth 1 -type f -iname "*" -mmin +1);
  do
    aveIFS="$IFS"; IFS=''; ls $file; 
    sudo mv "$allfiles" /schoolstore/
    IFS="$saveIFS"
  done

어떻게든 최적화할 수 있는 방법이 있을 수도 있는데, while멈추지 않는 것 같아서 코드 일부를 삭제했습니다.

말할 필요도 없이 이러한 유형의 코드(또는 해당 문제에 대한 코드)를 실행하기 전에 모든 파일을 백업하십시오.

find또는 $IFS를 변경하는 대신 해당 플래그가 있는 명령 하나만 변경하면 됩니다 -exec. 내가 의미하는 바는 다음과 같습니다(다시 말하지만, 테스트되지 않음).

find /share/ -maxdepth 1 -type f -iname "*" -mmin +1 -exec mv {} /schoolstore/ \;

관련 정보