Ich habe die Antwort von edmondscommerce angepasst, indem ich eine einfache awk-Anweisung hinzugefügt habe, die die Ausgabe der for-Schleife summiert und die Summe ausgibt (geteilt durch 1024*1024, um sie in Mb umzuwandeln)
for f in `git status --porcelain | sed 's#^...##'`; do du -cs $f | head -n 1; done | sort -nr | awk ' {tot = tot+$1; print } END{ printf("%.2fMb\n",tot/(1024*1024)) }'
Beachten Sie, dass --porcelain Pfadnamen relativ zum Stammverzeichnis der Git-Repositorys ausgibt. Wenn Sie dies also in einem Unterverzeichnis tun, kann die du-Anweisung die Dateien nicht finden..
(whoppa; meine erste Antwort in SoF, möge die Macht mit ihr sein)
Ich habe eine modifizierte Version davon verwendet, weil ich Dateien mit Leerzeichen hatte, die es zum Absturz brachten. Ich war mir auch bei den Größenberechnungen unsicher und habe einen unnützen head
entfernt :
git status --porcelain | sed 's/^...//;s/^"//;s/"$//' | while read path; do
du -bs "$path" ;
done | sort -n | awk ' {tot = tot+$1; print } END { printf("%.2fMB\n",tot/(1024*1024)) }'
Ich bevorzuge while
da es etwas sicherer ist als for
:Es kann immer noch unangenehme Dinge mit Dateien anstellen, die Zeilenumbrüche enthalten, also wünschte ich, es gäbe einen, um null
zu übergeben -separate Dateien dennoch in der Lage sein, nach dem Status zu suchen, aber ich konnte keinen netten Weg dafür finden.
Ich glaube, ich habe meine eigene Frage beantwortet:
for f in `git status --porcelain | sed 's#^...##'`; do du -cs $f | head -n 1; done | sort -nr; echo "TOTAL:"; du -cs .
Ich bin jedoch offen für bessere Ideen oder nützliche Tricks. Meine aktuelle Ausgabe beträgt 13 GB :)
Der obige Befehl ist im Grunde da, er gibt mir die Gesamtsumme Zeile für Zeile aus dem Git-Status, aber nicht die Gesamtsumme. Ich bekomme derzeit die Summe aller Dateien am Ende, was nicht korrekt ist. Ich habe versucht, bc
zu verwenden konnte es aber nicht zum Laufen bringen