
Ich versuche alle leeren Ordner innerhalb eines Verzeichnisses zu löschen. find . -type f -empty
Finde jedoch nichts, da jeder Ordner einen versteckten .svn
Ordner enthält.
Wie kann ich das umgehen?
Antwort1
Wenn Sie können, können Sie natürlich zuerst alle .svn
Ordner entfernen. Nachteil: Sie verlieren Versionskontrollinformationen, wenn jemand SVN verwendet. Wenn jemand SVN verwendet, ist es keine gute Idee, nur diese Ordner zu entfernen (oder eigentlich müssen Sie diese auch aus SVN entfernen, da SVN Ordner und Dateien verfolgt).
Wenn das nicht möglich ist, würde ich den Skriptweg wählen:
for folder in $(find . -type d); do
if [ "`ls $folder | wc -l`" -eq 0 ]; then
echo "I am going to delete $folder"
fi
done
Machen Sie zunächst einen Probelauf, da es Überraschungen geben könnte. Dann können Sie rm -r
stattdessen Änderungen vornehmen echo
.
Beachten Sie jedoch, dass hierdurch alle Ordner entfernt werden, die nur Punktdateien enthalten (sie a/.this_is_super_important
werden also beispielsweise gelöscht, wenn keine anderen Dateien oder Ordner vorhanden sind).
Antwort2
Kleine Änderung (einfach das Verzeichnis ausdrucken und später weiterleiten 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
Fügen Sie dies irgendwo in Ihr ein $PATH
, möglicherweise als svn-empties
, und führen Sie dann zuerst Folgendes aus:
svn-empties
um die gefundenen Verzeichnisse aufzulisten (Liste bei Bedarf ändern) und dann weiterzuleiten an xargs
:
svn-empties | xargs svn rm
Dieses Skript hat sich bei der Verwendung als sehr nützlich erwiesen git-svn
(danke!). Da git
es leere Verzeichnisse nicht verfolgt, kann es passieren, dass ich viele leere Verzeichnisse im Subversion-Repository habe. Ich habe svn co
eine separate Kopie des Repositorys und führe es svn-empties | xargs svn rm
regelmäßig aus. Die Verwendung von Subversion war nicht meine Entscheidung ;)
Antwort3
Ich bin gerade darüber gestolpert und habe dieses Skript verwendet, es aber so geändert, dass nur leere Verzeichnisse mit .svn und keine anderen Dateien, weder versteckt noch normal, berücksichtigt werden.
Bedenken Sie auch, dass ich svn rm verwende, es also für die Arbeit mit einem Repository gedacht ist. Sie könnten das Skript anpassen, um etwas anderes mit dem Verzeichnis zu machen.
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
Antwort4
- das Problem behoben, dass: Leerzeichen im Pfad
- können das Skript mit dem PATH-Parameter wie folgt aufrufen:
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