"모든 vim 스왑 파일을 찾아 확인으로 제거" 명령에 어떤 문제가 있나요?

"모든 vim 스왑 파일을 찾아 확인으로 제거" 명령에 어떤 문제가 있나요?

*.swp모든 vim 스왑 파일을 제거 하고 확인을 통해 제거하려고 합니다 . 명령 find이 파일을 찾았지만 옵션 과 함께 rm표시됩니다 . 파일 경로를 하드코딩하고 그냥 사용하면 제대로 작동하는 것 같습니다.No such file or directory-irm -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

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

이 부분은 bash에서 shopt -s globstar재귀 매칭을 활성화합니다 . **당신은 이것을 당신의 안에 넣고 .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?하면 여러 플랫폼에서 호환됩니다.

관련 정보