"모든 vim 스왑 파일을 찾아 확인 후 삭제" 명령에 무슨 문제가 있나요?

"모든 vim 스왑 파일을 찾아 확인 후 삭제" 명령에 무슨 문제가 있나요?

*.swp모든 vim 스왑 파일을 삭제 하고 확인을 통해 삭제하려고 합니다 . 명령 find이 파일을 찾았지만 rm옵션 No such file or directory-i. 파일 경로를 하드코딩하고 rm -i.

아래를 참조하세요

(doors)hobbes3@hobbes3 ~/Sites $ find mysite mysite_BAK -name *.swp -exec 'rm -i {}' \;
find: rm -i mysite/templates/.base.html.swp: No such file or directory
find: rm -i mysite/templates/doors/orders/.create.html.swp: No such file or directory
find: rm -i mysite/templates/doors/orders/.detail.html.swp: No such file or directory
find: rm -i mysite/templates/doors/orders/.list.html.swp: No such file or directory
(doors)hobbes3@hobbes3 ~/Sites $ rm -i mysite/templates/.base.html.swp 
remove mysite/templates/.base.html.swp? n

내 생각엔 내가 잘못된 선택을 한 것 같아 -exec. 어떤 제안이 있으십니까? 미리 감사드립니다!

답변1

오류의 원인은 다음과 같습니다.찾다, 아니요RM.

'rm -i <file>'그 이유는 단일 매개변수로 작성했기 때문입니다 . 이는 다음과 같이 다시 작성됩니다.

find mysite mysite_BAK -name '*.swp' -exec rm -i '{}' \;

따라서 find는 "-exec" 뒤에 여러 인수를 취하고 첫 번째 인수를 명령으로 처리하고 나머지 인수를 명령 인수로 처리합니다.

답변2

업데이트된 답변:

bash 버전 >4.0을 사용하는 경우 매우 간단한 globstar 함수를 사용할 수 있습니다.

shopt -s globstar
rm -i **/*.swp

이는 공백이 포함된 파일 이름에도 적용됩니다!

이 섹션 shopt -s globstar에서는 bash에서 재귀 일치를 활성화합니다. **몸에 붙이고 .bashrc영원히 행복할 수 있습니다.

이전 답변:

나는 일반적으로 간단한 도구를 조합하여 사용하는 것이 더 쉽다고 생각합니다.

CD를 dir로 복사한 다음:

rm -i `find . | grep .swp$`

기억하기가 더 쉽습니다(성능이 문제가 되지 않는 경우)!

경고: 파일 이름에 공백이 포함되지 않은 경우에만 이 옵션을 사용하십시오.

답변3

이렇게 하면 나는 달려갈 것이다.

find mysite mysite_BAK -type f -name .\*.sw? -exec rm -i {} ";"

VIM의 스왑 파일은 .swp로만 끝나지 않습니다. .swp가 있으면 VIM은 .swo를 생성한 다음 .swn 등을 생성합니다. 또한 스왑 파일에는 .file1.rb.swp와 같이 점(.)이 앞에 붙습니다.

확인(-i) 없이 VIM 스왑 파일을 찾아 삭제하는 다른 방법:

find some_dir -type f -name .\*.sw? | xargs rm 
find some_dir -type f -name .\*.sw? -exec rm {} ";"
find some_dir -type f -name .\*.sw? -delete  # -delete option does not work in Git Bash

"-type f"가 없으면 디렉터리를 삭제할 때 오류가 발생합니다. 또한 \in은 .\*.sw?여러 플랫폼과 호환됩니다.

관련 정보