ターミナルからSVNリポジトリ配下にある特定の拡張子のファイルだけ削除する
エンジニアならSVNリポジトリ配下にある、特定の拡張子のファイルを一度に削除したくなることがあると思います。あるんです。
そういう時にFinderやNemoとか、その辺のファイルマネージャからちまちま消していくのは大変つらいです。なのでターミナルからサッと消しましょう、というメモです。
コマンド
コマンドは大体、以下のようになるかと思います。試した環境がMac OS 10.6なのでコマンドはGNUのものでなくBSDのものです。とはいえ、Ubuntuなどでも大して変わらないかと。
$ find (SVNリポジトリのパス) -type d -name '.svn' -prune -or -type f -iname '*.txt' -print0 | xargs -0 rm -f --
詳しい説明
SVNリポジトリにあるファイルを削除するのですが、探索する際に.svn
ディレクトリが邪魔になります。これを無視するには以下のようにオプションを指定します。
-type d -name '.svn' -prune
-type d
でディレクトリのみを、-name '.svn'
でディレクトリ名を指定しています。
ディレクトリに対して-prune
を付けると、そのディレクトリの配下を探索しないようになるので、これで.svn
以下のファイルは検索しないことになります。
.svn
ディレクトリを除外しつつ、ファイルを検索するために-or
を指定します。
-or
特定の拡張子のファイルを検索するために、以下のように指定します。
-type f -iname '*.txt'
-type f
でファイルのみを、-iname '*.txt'
で拡張子が.txt
のファイルを検索します。
ファイル名の指定では-name
でなく-iname
を指定しているので、大文字小文字を区別しません。
なので.TXT
であっても対象になります。
-print0 | xargs -0
-print0
で、ヌル文字を区切り文字として検索結果を出力します。これにより、半角スペースを含んだファイルでも正常に扱えるようになります。
パイプでつないでいるxargsの方にも-0
を指定して、ヌル文字を区切り文字として扱うようにしています。
rm -f --
あとは渡された検索結果に対してrm -f
を実行しているだけです。--
は以降にはオプションは存在しないことを示すものなので、(確か)ファイル名の先頭が-
で始まっているファイルでもオプションと認識されて削除に失敗する、といったことがなくなります。
というメモなのでした。
find
の直後に-E
を付加(拡張正規表現を使用、ただしBSDの場合)し、-iname
でなく-iregex '.*\.(txt|md)$'
などとすると複数の拡張子のファイルを同時に削除できて、もっと幸せになるかもしれません。
Author And Source
この問題について(ターミナルからSVNリポジトリ配下にある特定の拡張子のファイルだけ削除する), 我々は、より多くの情報をここで見つけました https://qiita.com/sasaplus1/items/ba97017a97da00dd4d69著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .