.png
한 디렉터리에서 다른 디렉터리로 파일을 복사하는 스크립트를 만들었습니다 . 스크립트는 다음과 같습니다.
i="`cat /usr/local/app1/default.conf | grep -i values | sed -e 's/\values=//g' -e 's/,/ /g'`"
for data in $i
do
cp -rvp /usr/local/dir1/$data.png /home/user1/dir1
done
위 스크립트를 실행하면 파일이 에서 dir1
로 복사되지만 /home/user/dir1
마지막에 다음과 같은 오류가 발생합니다.
cp: cannot stat ‘/usr/local/dir1/wasw\r.png’: No such file or directory
내용은 다음과 같습니다 default.conf
.
values= wads sead seda okaw wasw
명령은 cp
"wads", "sead" 등의 값을 검색하지만 결국 위의 오류가 발생합니다.
답변1
현재 가지고 있는 것과 동일한 코드를 유지하려면 다음 sed
과 같은 코드를 더 사용하는 것이 좋습니다.
i="`sed -n 's/'$'\r''//;s/,/ /g;s/values=//gp' /usr/local/app1/default.conf`"
for data in $i; do
cp -rvp /usr/local/dir1/$data.png /home/user1/dir1
done
작동 방식:
- 이
-n
플래그는sed
자동으로 줄을 인쇄하지 않도록 지시합니다. - 이
s/$'\r'//
명령문은\r
문제를 일으킬 수 있는 문자를 제거합니다. p
명령문 끝에 추가되는 것은 교체할 때만 버퍼를 인쇄합니다(라인에 존재하는 경우에만).s/values=//gp
values=
답변2
실제로 나는 귀하의 사용 사례를 이해하지 못하지만 .png
한 디렉터리에서 파일을 찾아 해당 파일을 다른 디렉터리에 복사하려고 한다는 것을 이해합니다. 귀하의 사용 사례에 대한 나의 이해가 정확하다면 다음 명령이 도움이 될 것입니다.
find /home/your/source/path/ -name \*.png -exec cp {} /home/your/destination/path/ \;
답변3
아마도 Windows 컴퓨터에서 default.conf 파일을 편집하여 복사했을 것입니다. 줄 끝의 개행 문자 앞에 추가 문자가 있는 것 같습니다. 노력하다 od -c default.conf
. 다음과 같은 결과를 얻을 수 있습니다.
0000000 v a l u e s = w a d s s e a
0000020 d s e d a o k a w w a s w
0000040 022 \n
0000042
파일을 편집하여 022
문자(예: \r
)를 제거하고 다시 시도하세요.