나는 나만의 작은 백업 스크립트를 작성하려고 노력해 왔습니다. 스크립트를 실행할 때 문제가 발생하는데 rm
명령이 관련이 없습니다. 나는 여전히 출력을 처리하고 싶지만(작업 실패 여부에 따라 다른 메시지 표시) rm
현재는 다음과 같습니다.
ls -t | tail -n +$startnumber | xargs -d '\n' rm && echo "Removed old backup(s)." || echo "No more than $keepnumber files; nothing to do."
불행하게도 출력은 다음과 같습니다.
rm: missing operand Try 'rm --help' for more information. No more than 14 files; nothing to do.
처음 두 줄을 제거하고 직접 출력하고 싶습니다 . "더 명확한" 메시지. 을 사용해 보았지만 rm -f
이는 항상 (그리고 부정확하게) 성공적인 출력을 트리거합니다.
답변1
이러한 rm
메시지는 표준 오류( stderr
)로 전송됩니다. 표준 오류 출력( stderr
)을 다음으로 리디렉션할 수 있습니다 /dev/null
.
xargs -d '\n' rm 2>/dev/null
이렇게 하면 두 줄이 모두 터미널에 인쇄되는 것을 방지하고 사용자 정의 메시지만 표시됩니다.
답변2
난 그냥 임시 파일에 파일 목록을 저장하고 그것을 시도하기 전에 그 안에 있는 줄 수를 셉니다 rm
. (또는 먼저 파일 수를 세어보세요.)
rm
오류를 에서 로 리디렉션 할 수도 있지만 /dev/null
이렇게 하면 마스킹됩니다.효과적인오류도 있습니다.
설명하다
tmpfile=$(mktemp)
ls -t | tail -n +$startnumber > $tmpfile
if [ -s "$tmpfile" ] ; then
echo not empty, do something with filelist in $tmpfile
else
echo empty, do something else
fi
rm "$tmpfile"
물론, ls
어떤 이유로든 파일 이름에 개행 문자가 포함되어 있으면 문제가 발생합니다. (예, 가능합니다. 이 경우에는 일부 파일이 삭제되어야 하는데 삭제되지 않았음을 의미합니다.)