이름이 텍스트 파일에 있으면 디렉터리에서 파일을 복사합니다.

이름이 텍스트 파일에 있으면 디렉터리에서 파일을 복사합니다.
#!/bin/bash

while IFS='' read -r line || [[ -n "$line" ]]; do
    cd /home/Sud/Minimal\ Packages/All/
    if [ -d $line ]
    then
        cp $line*.rpm /home/Sud/NewFolder/rpms/
    else
        echo $line>>/home/Sud/NewFolder/notfound.txt
    fi
done < "$1"

위 코드를 실행하려고 하는데

  1. 텍스트 파일을 한 줄씩 읽기
  2. 같은 이름의 디렉터리가 존재하는 경우 해당 폴더를 검색하세요.
    • ㅏ)그렇다면 해당 디렉토리의 내용을 다른 디렉토리에 복사하십시오.
    • 비)그렇지 않은 경우 디렉터리 이름을 다른 텍스트 파일에 복사하세요.

스크립트를 실행할 때마다 notfound.txt검색 중인 폴더에 이름이 있더라도 모든 이름이 복사됩니다.

내가 어디서 잘못됐나요?

답변1

공백을 올바르게 처리하기 위해 모든 용도를 $line큰따옴표로 묶어 볼 수 있습니까?

#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
cd /home/Sud/Minimal\ Packages/All/
if [ -d "$line" ]
then
    cp "$line*.rpm" /home/Sud/NewFolder/rpms/
else
    echo "$line" >> /home/Sud/NewFolder/notfound.txt
fi
done < "$1"

답변2

if cp "$line"*.rpm destination/ ; then
    echo $line "successful!"
else
    echo $line "not found!"
    echo "$line">> /home/Sud/notfound.txt
fi

이것은 나에게 효과적입니다.

관련 정보