Angenommen, unter dem aktuellen Verzeichnis gibt es mehrere Unterverzeichnisse, und eines heißt A.
Wie lösche ich alle Unterverzeichnisse außer A mit Bash?
Bash hat das Globbing verlängert (zuerst testen, dann das Echo entfernen):
shopt -s extglob
echo rm -rf !(A)
shopt | grep ext
Sie können sehen, ob das Plugin aktiviert ist.quelle
Wie wäre es mit:
Dies vermeidet die "Knappheit" eines Tippfehlers in den anderen Befehlen.
quelle
Etwas wie
sollte tun.
bearbeiten
Es sollte wirklich so sein
um ein
find
Wiederauftreten unter A zu verhindern .quelle
Normalerweise mache ich das, indem ich einen ls-Befehl ausarbeite, der es zuerst richtig macht. Ich bin nicht auf einer Unix-Maschine, aber so etwas wie:
ls -lda "[^ A]"
Sobald Sie es richtig verstanden haben, leiten Sie es an einen Befehl weiter
ls -lda "[^ A]" | xargs rm -rf
Fühlen Sie sich frei, oben zu bearbeiten, wenn ich meinen regulären Ausdruck falsch habe ...
quelle
Wenn Sie flexibler, aber manuell sein möchten, können Sie Folgendes tun:
Auf diese Weise können Sie allgemeines Munging durchführen.
quelle
Hier ist eine Möglichkeit. Seien Sie vorsichtig mit solchen Dingen, sie sind jedoch so mächtig, dass sie nur zum Guten oder Bösen verwendet werden können ...
quelle
Verwenden Sie find nicht, wie einige Leute mit -exec und rm gezeigt haben, ohne -print0 zu übergeben und -0 an xargs zu übergeben. Dateinamen werden mit Leerzeichen oder Zeilenumbrüchen verwechselt:
Verwenden Sie stattdessen find -print0 mit xargs -0, '-exec command {} +' oder -delete, wenn Ihr find dies unterstützt.
quelle
Siehe auch hier:
/programming/862388/delete-all-files-directories-except-two-specific-directories
quelle
Zusätzlich zum früheren Beispiel von:
Sie können auch tun:
zu vermeiden,
cd some/subdir
zuerst müssen.quelle