*.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?
複数のプラットフォームと互換性があります。