
ディレクトリ内のすべての空のフォルダーを削除しようとしています。ただし、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
- パス内のスペースの問題を解決しました
- 次のように 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