UNIX의 디렉토리에서 특정 문자열을 포함하는 모든 파일을 어떻게 삭제합니까?

UNIX의 디렉토리에서 특정 문자열을 포함하는 모든 파일을 어떻게 삭제합니까?

파일 이름에 공백이 없으면 작동하는 몇 가지 예를 찾았습니다. 불행하게도 파일 이름에 공백이 있습니다(제가 선택한 것이 아니며 실제로 공백을 제거해야 합니다).

예를 들어, 이것이 효과가 있을 것이라고 생각한 것입니다.

찾다 . -유형 f | grep ).MOV | xargs rm

다음과 같은 파일을 삭제하고 싶기 때문입니다.

  • L112 (1).MOV
  • L113 (1).MOV
  • L113 (2).MOV
  • 등.

그리고 나는 다음과 같은 파일을 유지하고 싶습니다

  • L112.MOV
  • L113.MOV
  • L114.MOV
  • 등.

그러면 파일이 올바르게 검색됩니다.

찾다 . -유형 f | grep ).MOV

하지만 rm으로 파이프하면 파일 이름의 공백으로 인해 문제가 발생합니다.

어떤 도움이라도 대단히 감사하겠습니다.

답변1


rm *\).MOV

답변2

xargs개행 문자를 구분 기호로 사용하도록 지시합니다 .

find . -type f | grep ).MOV | xargs -d'\n' rm

더 나은 방법은 find매칭을 수행하고 사용 -print0하고 xargs -0허용하는 것입니다.어느파일 이름에는 문자( \n! )도 포함됩니다.

find . -type f -name '*).MOV' -print0 | xargs -0 rm

더 좋은 점은 직접 find전화를 하는 것입니다 rm.

find . -type f -name '*).MOV' -exec rm {} +

가장 좋은 방법은 건너뛰고 rm삭제 find를 수행하는 것입니다.

find . -type f -name '*).MOV' -delete

아니면 이 특정한 경우에 누가 모든 중장비를 필요로 합니까?

rm *\).MOV

답변3

이 시도:

find . -name "*).MOV" -exec rm {} \;

답변4

대부분의 Unix 설치에서는 파일 이름 앞에 백슬래시를 붙여 공백을 표시할 수 있습니다. 예를 들어 다음을 시도해 보세요.

mkdir blah
cd blah
touch file1
touch file2
touch "file 3"
touch "file 4"

"ls"를 실행하면 다음이 표시됩니다.

파일 3 파일 4 파일1 파일2

이제 "ls *\ *"를 실행하면 공백이 포함된 모든 항목이 표시됩니다.

파일 3 파일 4

그렇다면 "rm *\ *"만 있으면 될까요? 또는 필요에 맞게 정규식을 약간 수정하세요.

도움이 되었기를 바랍니다!

관련 정보