Ich habe einige Dateien in einem ziemlich großen Projekt umbenannt und möchte die zurückgelassenen .pyc-Dateien entfernen. Ich habe das Bash-Skript ausprobiert:
rm -r *.pyc
Aber das geht nicht so durch die Ordner, wie ich es mir vorgestellt habe. Was mache ich falsch?
rm
mit den Argumenten [-r, a.pyc, b.pyc] aufgerufen werden.**/*.pyc
dann müssen Sie sich nicht erneut darum kümmernAntworten:
quelle
find . -name \*.pyc -delete
{}
. Was würde passieren, wenn versehentlich ein Zwischenpfad, der zufällig wie ein Fragment des gefundenen Pfads aufgerufen wird, in Wörter aufgeteilt und gelöscht würde?-delete
ist nicht Teil der POSIX-Spezifikation und kann nicht in allen Implementierungen von garantiert werdenfind
.find . -name '*.pyc' -delete
Sicher das einfachste.
quelle
find
unterstützt-delete
; Es ist nicht Teil des POSIX-Standards.__pycache__
. Siehe meine Antwort.-name '*.py?'
zu enthalten.pyo, .pyc,...
In der aktuellen Version von Debian haben Sie ein
pyclean
Skript, das sich in befindetpython-minimal
Paket enthalten ist.Die Verwendung ist einfach:
quelle
pyclean
(und jetztpy3clean
) stammen aus einem Debian-Paket und sind daher nicht in RHEL enthalten.Fügen Sie Ihrem hinzu
~/.bashrc
:Dadurch werden alle .pyc- und .pyo-Dateien sowie
__pycache__
Verzeichnisse entfernt. Es ist auch sehr schnell.Verwendung ist einfach:
quelle
find . -type d -name "__pycache__" -delete
gibt häufig eine Warnung über einen fehlenden Pfad aus, da der Inhalt anscheinend der Warteschlange hinzugefügt wird, bevor der Ordner gelöscht wird.2>/dev/null
sollte das beheben.Wenn Sie bash> = 4.0 (oder zsh) verwenden
Beachten Sie, dass
*/*.pyc
alle.pyc
Dateien in den unmittelbaren Unterverzeichnissen der ersten Ebene ausgewählt werden, während**/*.pyc
der gesamte Verzeichnisbaum rekursiv durchsucht wird. Als Beispielfoo/bar/qux.pyc
wird von gelöscht,rm **/*.pyc
aber nicht von*/*.pyc
.Die Globstar-Shell-Optionen müssen aktiviert sein. So aktivieren Sie
globstar
:und um seinen Status zu überprüfen:
quelle
rm **/*.pyc
und Laufenrm */*.pyc
? (Letzteres schien vor Ort für mich zu arbeiten.)rm */*.pyc
löscht alle.pyc
Dateien in allen Unterverzeichnissen der Tiefe 1.rm **/*.pyc
löscht alle.pyc
Dateien in allen Unterverzeichnissen der Tiefe 0+**
so,*
als würde das Ausführen stattdessen und das Ausführenshopt globstar
einen Fehler auslösen ).Ich habe dafür einen Alias verwendet:
quelle
find -print0
undxargs -0
stattdessen verwenden.Für Windows-Benutzer:
quelle
Der Fund sucht rekursiv nach * .pyc-Dateien. Die xargs nehmen diese Liste von Namen und senden sie an rm. Mit -print0 und -0 werden die beiden Befehle angewiesen, die Dateinamen durch Nullzeichen zu trennen. Dies ermöglicht die korrekte Verwendung von Dateinamen, die Leerzeichen enthalten, und sogar von Dateinamen, die eine neue Zeile enthalten.
Die Lösung mit -exec funktioniert, aber es wird für jede Datei eine neue Kopie von rm erstellt. Auf einem langsamen System oder mit sehr vielen Dateien dauert das zu lange.
Sie können auch ein paar weitere Argumente hinzufügen:
Iname fügt Groß- und Kleinschreibung hinzu, z. B. * .PYC. Das no-run-if-empty verhindert, dass Sie einen Fehler von rm erhalten, wenn Sie keine solchen Dateien haben.
quelle
Das ist schneller als
quelle
Ferner wollen die Menschen in der Regel alle entfernen
*.pyc
,*.pyo
Dateien und__pycache__
Verzeichnisse rekursiv im aktuellen Verzeichnis.Befehl:
quelle
find
,grep
und Freunde dort nicht funktionieren.Um eine andere Variante in den Mix zu werfen, können Sie auch folgende Backquotes verwenden:
quelle
rm
.Django-Erweiterung
Die Implementierung kann im Quellcode angezeigt werden .
quelle
voll rekursiv
quelle
**
ist redundant, und wie ind0k
der Antwort muss Globstar in Bash 4+ aktiviert sein, damit dies wie beabsichtigt funktioniert. dh tunshopt -s globstar
oder haben Sie das in einer Ihrer bezogenen Bash. Dateien.ll
ist in der Regel auf etwas wie Alias ausgerichtetls -l
, ist aber nicht wirklich ein Befehl oder portabel. Also, um rekursiv alle.pyc
Dateien in aufzulisten.
echo **/*.pyc
Um aufzulisten , sollten Sie stattdessen etwas tun, bei dem Globstar aktiviert istErster Lauf:
Dann füge hinzu:
Zu ~ / .profile
quelle
Wenn Sie .pyc nicht mehr möchten, können Sie diese einzelne Zeile in einem Terminal verwenden:
Wenn Du Deine Meinung änderst:
quelle
rm -r
rekursiert in Verzeichnisse, aber nur in die Verzeichnisse, denen Sie gebenrm
. Diese Verzeichnisse werden ebenfalls gelöscht. Eine Lösung ist:find
findet alle * .pyc-Dateien rekursiv im aktuellen Verzeichnis, und diefor
Schleife durchläuft die Liste der gefundenen Dateien und entfernt jede einzelne.quelle
find
mit seinem-exec
Prädikat:find . -name '*.pyc' -exec rm {} +
(schöner, kürzer, sicherer, robuster, effizienter).quelle
Du kannst rennen
find . -name "*.pyc" -type f -delete
.Verwenden Sie es jedoch mit Vorsicht. Zuerst ausführen
find . -name "*.pyc" -type f
, um genau zu sehen, welche Dateien Sie entfernen werden.Stellen Sie außerdem sicher, dass -delete das letzte Argument in Ihrem Befehl ist. Wenn Sie es vor das Argument -name * .pyc setzen, wird alles gelöscht.
quelle
Wenn Sie alle .pyc-Dateien aus dem Projektordner löschen möchten.
Erstens hast du
Suchen Sie dann die gesamte .pyc-Datei und löschen Sie sie.
quelle