#!/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"
위 코드를 실행하려고 하는데
- 텍스트 파일을 한 줄씩 읽기
- 같은 이름의 디렉터리가 존재하는 경우 해당 폴더를 검색하세요.
- ㅏ)그렇다면 해당 디렉토리의 내용을 다른 디렉토리에 복사하십시오.
- 비)그렇지 않은 경우 디렉터리 이름을 다른 텍스트 파일에 복사하세요.
스크립트를 실행할 때마다 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
이것은 나에게 효과적입니다.