Bash 스크립트에 같은 이름의 파일이 있는 경우 특정 폴더를 어떻게 이동할 수 있나요?

Bash 스크립트에 같은 이름의 파일이 있는 경우 특정 폴더를 어떻게 이동할 수 있나요?

특정 파일을 찾아 폴더로 이동하는 쉘 스크립트를 작성하려고 합니다.

    #!/bin/sh
echo -n "/home/cosmoretro/movie/"
        read text2
while :
        do
        echo -n "Ara:"
        read text1
        b=$(find /home/cosmoretro 2>/dev/null -iname "$text1"*)
        IFS=$'\n'
    mv $b /home/cosmoretro/movie/"$text2"
done

하지만 검색한 폴더와 동일한 파일이 있으면 파일도 이동합니다.

내가 원하는 것은 폴더 이동뿐입니다.

답변1

나는 이 대본을 읽는 것조차 힘들다. 조금 다시 작성해 보도록 제안해도 될까요?

#!/bin/sh
echo -n "/home/cosmoretro/movie/"
read destinationFileName

while :
do
    echo -n "Ara:"
    read sourceFileName
    sourceFile=$(find /home/cosmoretro -type d -iname "$sourceFileName" -print -quit 2> /dev/null)
    if [[ -z $sourceFile ]]; then
        echo "No file named $sourceFileName found"
    else
        mv -- "$sourceFile" /home/cosmoretro/movie/"$destinationFileName"  
    fi
done

내가 한 것:

  • destinationFileName대신에 다음과 같은 설명적인 이름을 사용하십시오 .text2
  • 적절하게 들여쓰기
  • find를 지정하여 디렉토리만 찾도록 하십시오 -type d. 파일만 이동하려면 -type f대신 를 사용하세요 -type d.
  • 중요하지 않으므로 리디렉션을 명령 끝으로 이동하십시오.
  • 첫 번째 파일( ) find을 찾은 후 중지합니다 .-quit
  • *명령 에서 불필요한 항목을 제거하십시오 find. 거기에서 무엇을 원하는지 확실하지 않습니다. 파일 이름에 와일드카드를 사용하려는 경우(예: 검색하면 fooreturn foobar) 와일드카드를 입력해야 합니다.~ 안으로따옴표, 즉 "$sourceFileName*".
  • -z결과가 비어 있으면 테스트를 통해 파일이 전혀 발견되었는지 확인합니다 .
  • 옵션 끝 옵션을 사용하여 mv다음으로 시작하는 파일 이름으로부터 보호하세요 .---
  • 공백으로 인해 명령이 중단되는 것을 방지하려면 인수를 적절하게 인용하십시오(그렇다면 변경할 필요 없음 IFS).

관련 정보