すべての vim スワップ ファイルを削除し*.swp
、確認して削除しようとしています。コマンド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
、いつまでも幸せに過ごすことができます。
古い答え:
私は通常、シンプルなツールを組み合わせて使う方が簡単だと感じています
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?
複数のプラットフォームで互換性が確保されます。