Ich muss das gesamte Verzeichnis, das Dateien enthält, in einem bestimmten Unterverzeichnis behalten, aber zum Löschen alle Verzeichnisse löschen, in denen das Unterverzeichnis leer ist.
Genauer gesagt ist hier die Struktur:
A
|
|--------312311
| |
| |----Recording
| |----a.txt
| |----b.txt
|
|
|--------453453
| |----Recording
| |
| |-------a.mp3
| |----a.txt
| |----b.txt
|
|
|--------566532
| |----Recording
| |----a.txt
| |----b.txt
Die Unterverzeichnisse können eine Datei enthalten oder nicht. Ich muss also das gesamte Verzeichnis wie '312311' & '566532' löschen und nur '453453' sollte mit allen Daten belassen werden, da sich eine Datei im Ordner 'Aufnahme' befindet, die für mich ein bestimmtes Verzeichnis ist.
Ich habe viele Beiträge gesehen, aber es enthält Links zu vielen bestimmten Dateinamen. Jede Hilfe wird sehr geschätzt, da ich viele Male in der Woche tun muss.
command-line
directory
find
Derek James
quelle
quelle
Antworten:
Das folgende Skript funktioniert genau so, wie Sie es beschreiben:
Sucht in jedem Ordner nach einem Ordner mit dem Namen "Aufnahme".
In einem Bild:
wird darin enden, dass:
Das Skript
Benutzen
delete_empty.py
Führen Sie es mit dem Verzeichnis (full!) (Enthält Ihre Unterverzeichnisse, A in Ihrem Beispiel) als Argument mit dem folgenden Befehl aus:
Das ist es.
Erläuterung
Den Inhalt Ihres Ordners "A" in das Skript einspeisen,
listet seine Unterverzeichnisse (und Dateien) auf. Dann:
wird versuchen, den Inhalt jedes der (Unter-) Ordner aufzulisten, was einen Fehler auslöst, wenn das Element eine Datei ist:
oder wenn der Ordner "Aufnahme" überhaupt nicht existiert:
Wenn der Ordner "Aufnahme" vorhanden und leer ist, wird der übergeordnete Ordner entfernt:
BEARBEITEN
Zusätzlich, wie in Kommentaren angefordert, eine Version, die nach mehreren Unterverzeichnissen (Namen) sucht.
Im Fall enthält das Verzeichnis jede der aufgeführten (un- leer) subdirs, wird das Verzeichnis gehalten. Sonst wird es gelöscht.
Benutzen
delete_empty.py
Führen Sie es mit dem Verzeichnis (full!) (Enthält Ihre Unterverzeichnisse, in Ihrem Beispiel A) und den Namen der Unterverzeichnisse als Argumente mit dem folgenden Befehl aus:
Das ist es.
Das Skript
Hinweis
Bitte führen Sie zuerst ein Testverzeichnis aus, um sicherzustellen, dass es genau das tut, was Sie wollen.
quelle
Verwenden von
find
undxargs
:(Entfernen Sie das,
echo
sobald Sie sicher sind, dass es die richtigen Verzeichnisse identifiziert). Derprintf '%h\0
Teil druckt das (nullterminierte) übergeordnete Verzeichnis - vonman find
:Bsp.: Gegeben
dann
quelle
[\d]*
?Hier ist eine einfachere Bash-Lösung:
Es funktioniert, weil
rmdir
es fehlschlägt, wenn das Verzeichnis nicht leer ist, und&&
verhindert , dass das Verzeichnisrm -r
ausgeführt wird, wennrmdir
es nicht erfolgreich ist. Der Glob*/
stellt sicher, dass Sie nur an den Verzeichnissen arbeiten, damit andere Dateien nicht betroffen sind.quelle