Löschen Sie alle leeren Ordner, auch wenn sie .svn-Ordner enthalten

Löschen Sie alle leeren Ordner, auch wenn sie .svn-Ordner enthalten

Ich versuche alle leeren Ordner innerhalb eines Verzeichnisses zu löschen. find . -type f -emptyFinde jedoch nichts, da jeder Ordner einen versteckten .svnOrdner enthält.

Wie kann ich das umgehen?

Antwort1

Wenn Sie können, können Sie natürlich zuerst alle .svnOrdner 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 -rstattdessen Änderungen vornehmen echo.

Beachten Sie jedoch, dass hierdurch alle Ordner entfernt werden, die nur Punktdateien enthalten (sie a/.this_is_super_importantwerden 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 gites leere Verzeichnisse nicht verfolgt, kann es passieren, dass ich viele leere Verzeichnisse im Subversion-Repository habe. Ich habe svn coeine separate Kopie des Repositorys und führe es svn-empties | xargs svn rmregelmäß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

  1. das Problem behoben, dass: Leerzeichen im Pfad
  2. 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

verwandte Informationen