.svn フォルダを含むすべての空のフォルダを削除します。

.svn フォルダを含むすべての空のフォルダを削除します。

ディレクトリ内のすべての空のフォルダーを削除しようとしています。ただし、find . -type f -emptyすべてのフォルダーに隠しフォルダーが含まれているため、何も見つかりません.svn

これを回避するにはどうすればいいでしょうか?

答え1

もちろん、可能であれば、最初にすべての.svnフォルダーを削除できます。欠点: 誰かが SVN を使用している場合、バージョン管理情報が失われます。誰かが SVN を使用している場合、それらのフォルダーを単に削除するのは良い考えではありません (または、実際には、SVN はフォルダーとファイルを追跡しているため、SVN からもそれらを削除する必要があります)。

それが不可能な場合は、スクリプトルートを使用します。

for folder in $(find . -type d); do
 if [ "`ls $folder | wc -l`" -eq 0 ]; then
  echo "I am going to delete $folder"
 fi
done

まずはテスト実行してみてください。何か驚くようなことが起こるかもしれません。その後、rm -r代わりに変更することができますecho

ただし、これによりドット ファイルのみを含むすべてのフォルダーが削除されることに注意してください (たとえば、a/.this_is_super_important他のファイルやフォルダーがない場合、削除されます)。

答え2

小さな変更 (単にディレクトリを印刷し、xargs後でパイプするだけです):

for folder in $(find -type d ! -path *.svn*); do
  if [ "`find $folder ! -path *.svn* ! -path $folder | wc -l`" -eq 0 ]; then
    echo $folder
  fi
done

これを のどこかに$PATH、おそらく として保存しsvn-empties、まず次を実行します。

svn-empties

見つかったディレクトリをリストし(必要に応じてリストを変更し)、パイプに渡しますxargs

svn-empties | xargs svn rm

このスクリプトは、使用中に非常に役立ちましたgit-svn(ありがとうございます!)。git空のディレクトリを追跡しないため、Subversion リポジトリに多くの空のディレクトリが残ることがあります。svn coリポジトリの別のコピーを作成し、svn-empties | xargs svn rm定期的に実行します。そもそも Subversion を使用するのは私の決定ではありませんでした ;)

答え3

私は偶然これに遭遇し、このスクリプトを使用しましたが、空のディレクトリを適切に考慮するように変更しました。.svn があり、隠しファイルまたは通常のファイルがないディレクトリのみです。

また、私は svn rm を使用していることを念頭に置いてください。これはリポジトリに対して機能することになっているため、ディレクトリに対して別の操作を実行するようにスクリプトを調整できます。

for folder in $(find -type d ! -path *.svn*); do
  if [ "`find $folder ! -path *.svn* ! -path $folder | wc -l`" -eq 0 ]; then
    svn rm $folder
  fi
done

答え4

  1. パス内のスペースの問題を解決しました
  2. 次のように PATH パラメータを使用してスクリプトを呼び出すことができます。

svn-empties YOU_WANT_TO_SEARCH_PATH

C_IFS=$IFS

IFS=$'\n'

for folder in $(find "$1" -depth -type d ! -path *.svn*|sort -r); do
  counts=$(find "$folder" -type f ! -path *.svn* ! -path $folder | wc -l)

  if [ $counts -eq 0 ]; then
    echo $folder
  fi

done

IFS=$C_IFS

関連情報