この「すべての vim スワップ ファイルを検索し、確認とともに削除する」コマンドの何が問題なのでしょうか?

この「すべての vim スワップ ファイルを検索し、確認とともに削除する」コマンドの何が問題なのでしょうか?

すべての vim スワップ ファイルを削除し*.swp、確認して削除しようとしています。コマンドfindはファイルを見つけましたが、オプションで表示されます。ファイルのパスをハードコードして使用すると、機能するようです。rmNo 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

これはスペースを含むファイル名でも機能します。

このshopt -s globstar部分は、bash の再帰**マッチングを有効にします。これを に入れて.bashrc、いつまでも幸せに過ごすことができます。

古い答え:

私は通常、シンプルなツールを組み合わせて使う方が簡単だと感じています

dir に cd してから:

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)。

確認なしで VIM のスワップ ファイルを検索して削除する他の方法 (-i):

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?複数のプラットフォームで互換性が確保されます。

関連情報