• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] große Anzahl von Dateien löschen

DrSputnik

Member
Ich habe in einem Verzeichnis ca. 33000 Dateien,
alle sehr klein, wenn ich diese löschen will (rm -rf *)
wird nix gelöscht, weil zu viele Argumente ....

Jemand ne Idee, ohne dass ich alles einzeln, oder in Gruppen lösche??

z.B.
rm -rf TEST001*
rm -rf TEST002*
rm -rf TEST003*
u.s.w.

Am liebsten wäre mir ein Cronjob, der alles in eine Datei packt und dann alles putzt, da diese Dateien jeden Monat anstehen....

Danke
 
Moin DrSputnik,

es gibt AFAIK die Möglichkeit ein tar zu bauen wobei die Ursprungsdateien gelöscht werden wenn sie ins tar übernommen wurden. Danach das tar löschen ist dann wohl kein Thema. Ich bin mir jetzt aber nicht mehr im Klaren darüber wie das mit dem tar ging. man tar könnte helfen.
 

TeXpert

Guru
Ich hoffe jetzt mal ;) dass Du mit "nicht einzeln" das Löschen von Hand meinst ;)

dann ist das Trivial... (da es im prinzip das gleiche macht wie von Geier vorgeschlagen)

erst mal: Lösung von Geier,
Code:
--remove-files
              Dateien nach dem Hinzufügen zum Archiv löschen

so jetzt ist das IMHO aber Quatsch, da ja erst eine extra Datei entsteht.

was bedeutet "rm *" denn? das bedeutet für die Shell das gleiche wie "rm foo bar baz" und das ist Äquivalent zu "rm foo rm bar rm baz".

So die Shell stört sich an der zu langen Befehlszeile, dafür gibts mehrere Lösungen:

a/ find:
Code:
find . -exec rm -f {} \;
(wenn Verzeichnisse dabei sind, einfach die Tiefe beschränken.

b/ eine eigene Schleife:
Code:
ls -1 | while read file ; do rm -rf "$file" ; done
 
OP
D

DrSputnik

Member
Ich will ja ein Archive haben, weil ich die Daten zur Sicherheit noch brauche. Die kleinen Dateien will ich löschen, weil die Datensicherung sonst ewig braucht. Aber Eure Lösungen klingen gut, muss ich ausprobieren.

Erstmal besten Dank.
DrSputnik
 

TeXpert

Guru
haveaniceday schrieb:
Schau mal nach "xargs"

echo "files*" | xargs rm -f

xargs kriegt nie genug...

xargs ist ein guter Hinweis, aber,

Code:
echo "files*" | xargs rm -f
kann IMHO nicht gehen, da 'echo "files*"' nicht expandiert wirt (anders wäre es bei echo files*) damit bekommt xargs nur den parameter "files*" und kann damit nix anfangen (xargs expandiert nicht)

wenn dann also "echo files*" das geht natürlich nur solange gut, wie keine Leerzeichen im namen sind ;) davon bekommt xargs nix mit...

bei echo bin ich mir jetzt aber nicht sicher, wie hier die Expansion zuschlägt :( da echo ein Builtin ist, könnte es sein, dass echo file* klappt auch wenn die Expansion an sich zu lang ist.

jetzt zur guten Seite ;) zusammen mit find ist xargs sehr effektiv,

ich schrieb:
was bedeutet "rm *" denn? das bedeutet für die Shell das gleiche wie "rm foo bar baz" und das ist Äquivalent zu "rm foo rm bar rm baz".
das gilt natürlch nur syntaktisch, effektiv wird bei rm * nur ein rm prozess gestartet und nicht n-viele. xargs kann jetzt die Menge auf die passende menge zurechtstutzen, d.h. ein
Code:
find -print | xargs rm
könnte etwas schneller sein als die xargs lösung (ungetestet :) )
 
Oben