보호 된 파일을 제거 할 때“y”를 여러 번 발행하지 않아도되는 방법


52

"rm : 쓰기 방지 된 일반 파일 [x]를 제거 하시겠습니까?"에 대한 응답으로 사용할 솔루션을 찾고 있습니다.

bashrc에서 문자를 여러 번 발행하고 캐리지 리턴을 시도하는 것을 생각하고있었습니다. 우리는 어떻게합니까?


함수를 정의 할 수 있습니다. 이 전략은 당신을 도울 수 있습니다 : stackoverflow.com/questions/756756/… .
alpert

왜 이러고 싶니? 어쨌든 .bashrc에서 줄 바꿈과 달리 캐리지 리턴을 인쇄하는 것이 명백한 작업입니까?
l0b0

@ l0b0 질문이 더 구체적으로 편집되었습니다
Iancovici

.bashrc에서 파일을 왜 제거 하시겠습니까? 원래 작업은 여전히 ​​명확하지 않습니다.
l0b0

3
@echadromani SO / SE에서는 다른 상황에 적용 할 수있는 최적의 솔루션을 제공하기 위해 원래 문제를 이해하려고 시도하는 것이 일반적입니다.
l0b0

답변:


75

업데이트 된 질문을 기반으로 편집 :

파일 제거에 대한 요청을 피하려면 -f( "force") 옵션을 추가하십시오 .

rm -f /path/to/file

주어진 경로 중 하나라도 존재하지 않으면이를 보고 하지 않고 성공적으로 반환됩니다.

$ rm -f /nonexistent/path
$ echo $?
0

원래 답변 :

간단한 해결책은 다음과 같습니다.

yes "$string" | head -n $number | tr $'\n' $'\r'

yes줄 바꿈으로 구분하여 줄을 무한정 반복합니다. 시간 head이 지나면 중단 하고 개행을 캐리지 리턴으로 변환합니다. 캐리지 리턴으로 인해 출력이 표시되지 않을 수 있지만이 명령 (in )으로 전달하면 다음과 같이 표시 됩니다.$numbertrbash

printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"

없는 사용자 bash캔 파이프 결과로 od, hexdump또는 xxd실제 문자가 반환 참조하십시오.


7

때때로 내가 겪었던 다른 문제 는 / etc / bashrc에서 다음과 같이에 rm별칭 rm -i이 있습니다.

alias rm='rm -i'

이 경우 unalias rm몇 년 전에 찾은이 트릭을 사용할 수 있습니다. 예를 들어 별칭을 한 번만 무시하기 위해 별칭이 지정된 명령 앞에 백 슬래시를 넣으십시오.

\rm somefile

Nixcraft 의 기사를 통해 별칭에 대해 자세히 알아볼 수 있습니다 .


5

rm쓰기 보호 된 파일에 대해 "대화식"(사용자 입력 대기 프롬프트)을 표시하도록 하드 코딩됩니다. rm묻지 못하게하는 두 가지 방법이 있습니다 .

rm -rf somedir

rm -r --interactive=never somedir

( -rdirs 대신 파일을 삭제할 때도 작동하지 않습니다 )

설명:

-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합니다.


명시된 질문에 대한 답변 ( "보호 된 파일을 제거 할 때"y "를 여러 번 발행하지 않아도되는 방법")은 https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line을 참조 하십시오. / 338860 # 338860


1

모든 명령에 예를주십시오!

yes | rm -r /path/
yes | <command>

어쨌든 항상 다음을 사용하여 강제 실행할 수 있습니다 -f.

rm -r -f /path

-2

나도 같은 문제에 부딪쳤다. 위의 대답은 하나의 파일에 대한 것이지만 많은 예를 무시하려면.

당신이 사용할 수있는

sudo rm -r /path/to/directory

쓰기 금지 된 일반 파일을 모두 제거


전체 디렉토리를 제거하기 때문에 다운 보트됩니다. 아마도 OP는 동일한 디렉토리 서브 트리에있는 모든 단일 파일이 아니라 해당 파일 만 제거하려고합니다.
Jake

이봐 .. 당신이 옳을지도 몰라
Gopal Prasad

이봐 .. 당신이 옳을지도 몰라 그러나이 경우에는 아닙니다. 사용자가 많은 인내심과 시간을 가지고있는 것처럼, 그는 또한 몇 번 '예'를 줄 시간이 있습니다 ... 나는 하나의 명령으로 모든 파일을 제거하고 싶다고 가정했습니다. 보호 된 파일은 항상이 유형의 파일을 삭제하기 전에 확인을 요청합니다. 예를 들어 virtualenv를 만들고 나중에 파이썬에서 제거하려는 경우입니다. 시도해보십시오. 확인을 요구하는 매번 rm 명령을 찾을 수 있습니다. 당신은 답을 제공해야합니다. 나는 이런 식으로 상황을 해결했습니다.
Gopal Prasad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.