.swp
현재 디렉토리의 모든 파일을 찾아서 삭제하려고 합니다 . 다음 명령을 사용하고 있습니다.
rm -i `find . | grep .swp$`
하지만 매번 다음과 같은 오류가 발생합니다.
rm: missing operand
Try `rm --help' for more information.
내가 뭐 잘못 했어요?
답변1
나타나는 오류 메시지는 이름 패턴과 일치하는 파일이 없음을 나타낼 수 있습니다 .swp$
. 작성한 내용을 수행하는 일반적으로 더 안전한 방법(모든 파일 이름을 처리하므로):
find . -name '*.swp' -print0 | xargs -0 rm -i --
위의 코드 조각에서는 null 문자가 있는 레코드를 구분하기 위해 -print0
이를 사용했습니다 find
. 기본값은 불행히도 파일 이름에서는 작동하지 않는 개행 문자입니다. 를 사용하면 -print0
이 명령은 줄 바꿈이 포함된 파일 이름을 포함하여 모든 파일 이름에서 작동합니다. 마찬가지로 xargs -0
해당 입력은 널로 구분된 레코드로 처리됩니다.
답변2
또는 단독으로 사용되는 변형입니다 find
. 예를 들면 다음과 같습니다.
find . -name "*.swp" -ok rm {} +
아니면 확인하지 않은 경우도 있습니다(경고!).
find . -name "*.swp" -delete
답변3
작업을 완료하려면 항상 가장 간단한 도구를 사용하십시오. 현재 디렉터리에서만 작업하려고 하므로 다음 명령이 제대로 작동합니다.
rm -i *.swp
답변4
.swp
때로는 스왑 파일에 확장자 이상의 기능이 있는 경우도 있습니다 . saw
, , 등 swb
의 확장자를 가질 수도 있습니다 .swp
sushil@batpod:/app/DDB# ls -a
.gui.py.swo
gui.py
.serializers.py.swp
serializers.py
.tcinfo.py.swm
tcinfo.py
.views.py.swb
views.py
등...
거의 모든 확장자를 가진 스왑 파일을 제거할 수 있는 명령을 만들었습니다.sw*
주문하다:
find . -name '*.sw\*' | xargs -i rm {}
노트: 위 명령을 실행하기 전, 먼저 해당 명령으로 삭제할 파일을 살펴보고,
find . -name '*.sw\*'
중요한 파일을 삭제하지 마시길 바랍니다.