여기에 이 쉘 스크립트가 있습니다.
###
# Create a folder dynamically
mkdir archived_PA_"$(date -d "6 months ago - 1 day" +%Y-%m-%d)"_"$(date -d "1 day ago" +%Y-%m-%d)"
# Move files to new folder dynamically
find ./VA -newermt $(date +%Y%m%d -d '6 months ago') ! -newermt $(date +%Y%m%d -d 'today') -exec mv -t /var/log/pentaho/archived_PA_"$(date -d "6 months ago - 1 day" +%Y-%m-%d)"_"$(date -d "1 day ago" +%Y-%m-%d)" {} +
# Archive dynamic folder
zip -r archived_PA_"$(date -d "6 months ago - 1 day" +%Y-%m-%d)"_"$(date -d "1 day ago" +%Y-%m-%d)".zip /var/log/pentaho/archived_PA_"$(date -d "6 months ago - 1 day" +%Y-%m-%d)"_"$(date -d "1 day ago" +%Y-%m-%d)"
처음에는 명령줄에서 모든 줄이 제대로 실행되지만 이 명령을 사용하여 이 셸 스크립트를 실행하면 ./script_name.sh
다음 오류가 발생합니다.
./HIX-170061.sh: line 4: $'\r': command not found
find: missing argument to `-exec'
./HIX-170061.sh: line 7: $'\r': command not found
adding: var/log/pentaho/archived_PA_2023-01-09_2023-07-09^M/ (stored 0%)
즉, 다른 줄을 실행할 수 있지만(4번째 줄과 7번째 줄은 제외하지만 빈 줄이므로 중요하지 않다고 생각합니다), 6번째 줄에서 오류가 발생합니다 find: missing argument to `-exec'
.
답변1
이러한 $'\r'
메시지는 스크립트에 캐리지 리턴(CR) 문자와 개행 문자로 구성된 Windows 줄 끝이 포함되어 있으며 bash는 CR 문자를 공백이 아닌 문자로 처리한다는 것을 의미합니다.
이 오류는 find
전달된 마지막 인수가 command를 종료하는 예상된 더하기 기호 자체가 아니라 더하기 기호 뒤에 캐리지 리턴이 되기 때문에 발생합니다 -exec
.
스크립트를 실행하면 dos2unix
문제가 해결됩니다.
답변2
Notepad++를 사용하여 이 문제를 해결했습니다. 편집->EOL 변환->Unix로 이동하여 스크립트를 실행할 수 있습니다.