"rm: 쓰기 금지된 일반 파일 [x]를 제거하시겠습니까?"에 대한 답변을 찾고 있습니다.
bashrc에서 문자를 여러 번 내보내고 캐리지 리턴을 여러 번 내보내려고 합니다. 우리는 무엇을 해야 합니까?
답변1
업데이트된 질문을 기반으로 수정:
파일 삭제 여부를 묻는 메시지를 표시하지 않으려면 -f
("force") 옵션을 추가하세요.
rm -f /path/to/file
여기에는 부작용이 있다는 점에 유의해야 합니다. 지정된 경로가 존재하지 않으면 해당 경로는아니요이를 보고하면 성공적으로 반환됩니다.
$ rm -f /nonexistent/path
$ echo $?
0
원래 답변:
간단한 해결책은 다음과 같습니다.
yes "$string" | head -n $number | tr $'\n' $'\r'
yes
줄바꿈으로 구분하여 사용자가 제공한 문자열을 무한히 반복합니다. 여러 번 사용한 head
후에 중지 $number
하고 tr
개행 문자를 캐리지 리턴으로 변환합니다. 캐리지 리턴으로 인해 출력이 표시되지 않을 수 있지만 이를 다음 명령( bash
)에 전달하면 설명됩니다.
printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"
없는 사용자는 bash
결과를 로 파이프 od
하거나 반환된 실제 문자를 볼 수 있습니다 hexdump
.xxd
답변2
rm
질문하도록 하드코딩되어 있습니다.대화형으로쓰기 금지된 파일에 관해서. "대화형"은 질문을 인쇄한 다음 사용자 입력을 기다리는 것을 의미합니다.
묻는 것을 방지하는 방법에는 두 가지가 있습니다 rm
.
rm -rf somedir
^
그리고
rm -r --interactive=never somedir
^^^^^^^^^^^^^^^^^^^
-r
(둘 다 디렉토리 대신 파일을 삭제할 때도 작동합니다)
설명하다:
-f
rm
"존재하지 않는 파일 및 매개변수를 무시하고 메시지를 표시하지 않음"을 활성화합니다 .
--interactive=never
당신이 설교하는 것을 하십시오: 절대로 상호 작용하지 마십시오. 즉, 프롬프트를 표시하지 않습니다.
-f
와 의 차이점은 --interactive=never
"존재하지 않는 파일 및 인수 무시" 부분입니다.
비교하다:
$ rm -rf nonexistingname
$ echo $?
0
그리고
$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1
rm
상호 작용을 원하지 않지만 여전히 오류를 처리하려는 스크립트를 작성할 때 차이점은 주로 흥미롭습니다.
요약 : 명령줄에서 사용됩니다 rm -rf
.rm -r --interactive=never
보너스: 스크립팅 중이고 삭제하려는 파일 이름이 외부에서 온 경우, 이상한 파일 이름과 악의적인 입력을 방지하기 위해 위생 조치를 취해야 합니다.
rm -r --interactive=never -- "./$filename"
중요한 부분: --
대시로 시작하는 파일 이름을 방지하려면 옵션 끝을 이중 대시( )로 표시하고, 파일 이름에 공백이 없도록 하려면 따옴표를 사용하고 ./
파일 이름이 대시로 시작하는 것을 이중으로 방지하고 모든 파일을 강제 적용하려면 점 슬래시( )를 사용하십시오. 작업 디렉토리.
자세한 내용은 여기를 참조하세요.https://www.cyberciti.biz/faq/unix-linux-remove-strange-names-files/
명시된 질문("보호된 파일을 삭제할 때 "y"를 여러 번 실행하지 않는 방법")에 대한 답변은 다음을 참조하세요.https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line/338860#338860
답변3
제가 가끔 겪는 또 다른 문제는 /etc/bashrc에 다음과 같은 rm
별칭이 있다는 것입니다:rm -i
alias rm='rm -i'
이 경우 unalias rm
별칭이 지정된 명령 앞에 백슬래시를 배치하여 별칭을 한 번 무시하기 위해 몇 년 전에 제가 발견한 이 트릭을 사용할 수도 있습니다. 예를 들면 다음과 같습니다.
\rm somefile
다음 문서에서 별칭에 대해 자세히 알아볼 수 있습니다.닉 크래프트.
답변4
나는 또한 같은 문제에 직면했습니다. 위의 답변은 하나의 파일에만 적용되지만 많은 파일을 무시하려면 예입니다.
당신은 그것을 사용할 수 있습니다
sudo rm -r /path/to/directory
쓰기 금지된 일반 파일 모두 삭제