rm -f의 대체 옵션


10

커맨드 라인을 실행하고 싶습니다 :

cd ~/www/tmp/; rm -P 2*

그러나 2로 시작하는 파일이 없으면 오류가 발생합니다.

-f그러나 내가 사용하고 싶다고 생각할 것입니다 .

-f      Attempt to remove the files without prompting for confirmation, regardless of the file's permissions.  If the file does not exist, do not display a diagnostic message or modify the exit status to reflect an error.

그리고 내가 뭔가 이상한 일이 일어나고이 있다면, 나는 중단 명령을 원합니다 permissions- 파일에 대한주의. '존재하지 않음'오류 만 억제하고 싶습니다.

'rm errors'와 관련된 다른 질문을 살펴본 결과 두 가지가 관련이있는 것으로 나타났습니다.

파일 이름과 디렉토리를 삭제하십시오. 그러한 파일이나 디렉토리가 없습니다

그러나이 질문에 대한 답변으로 진행되는 모든 것을 이해하지 못하며 필요한지 모르겠습니다.

touch이 질문에 제안 해킹 :

파일이 누락 된 경우 rm이보고하지 않습니까?

성능에 영향을 미치지 않는다고 생각하기 때문에 실행 가능한 것 같습니다 (그러나 어떤 유형의 성능에 영향을 미치겠습니까?-즉, 이것은 합리적으로 확장 가능한 기술입니까?

if-then커맨드 라인 내에서 어떻게 할 것인지 잘 모르겠습니다 .

간단한 명령 행 cut-n-paste 정리를위한 다른 옵션이 있습니까?

겠습니까 find -delete내 경우에 더 잘 작동? 그렇다면 왜 그렇습니까?


문제의 오류 :

rm: 2*: No such file or directory

1
오류는 셸이 아니라 셸에서 발생 rm하므로 해당 내용을 말해야합니다.
Michael Homer

zsh대화식 쉘로 사용 하고 있습니까? 당신은 점점 No matches found오류?
Kusalananda

2
@MichaelHomer 아니요, 오류는 rm입니다. 쉘은 단지 문자열 2*을 파일 목록으로 확장하는 대신 rm 에 전달했습니다 . 문제의 오류를 보아라 : rm이 sh / bas / zsh /가 아니라 불평하고있다.
doneal24

답변:


13

단지 호출하려면 rm -P에 대한 기존의 이름이 디렉토리에있는 패턴과 일치하는 (그러나 아래) 일반 파일 :

find directory -maxdepth 1 -type f -name 'pattern' -exec rm -P {} +

예 :

find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +

비 디렉토리 만 일치 시키려면 ! -type d대신 사용하십시오 -type f. 차이점은 ! -type d더 광범위한 파일 형식 (심볼릭 링크, 명명 된 파이프, 소켓 등)에 해당한다는 것입니다.

찾은 파일에서 일부 조건에 대한 프롬프트가 표시되기 때문에 대신 작동 하지 않아야 합니다 .-delete-exec rmrm -f

제거 -maxdepth 1수 있도록 find반복적으로 하위 디렉터리의 모습을.


3
비록 ! -type d가까이에있을 수 있습니다 rm 2*, 나는 생각?
muru

따라서 해당 기능을 사용하려면 -P를 추가해야합니까? :find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +
user3082

@ user3082 예, 당신 -P도 사용하고 싶다는 것을 잊었습니다 .
Kusalananda

고마워 @muru, 나는 실제로 원 -type f하지만 그렇게 rm행동 하는 법을 몰랐다. 그래서 @Kusalanada의 제안은 발견되었으며, 차별화 / 설명은 학습에 좋습니다.
user3082 2018 년

@ user3082 아마 쉘의 확장 글로브를 사용해야 할 것이다 rm 2*(.).
muru
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.