wie’s mir scheint habe ich durch einen Programmierfehler enorm viele Dateien erzeugt, so viele, daß bash es nicht mehr mag. Gibt’s dazu 'nen workaround anders als viele, viele Einzellöschaktionen?
:~/\> rm gray\_????\_TI\*bmp
bash: /bin/rm: Die Argumentliste ist zu lang
sicherheitshalber noch die Anmerkung: das findet und löscht jetzt auch Dateien derartigen Namens in Unterverzeichnissen - da sollte man find vielleicht ein
sicherheitshalber noch die Anmerkung: das findet und löscht
jetzt auch Dateien derartigen Namens in Unterverzeichnissen -
da sollte man find vielleicht ein
-maxdepth 1
mitgeben.
Ah, danke, das hilft. -maxdepth 1 ist in diesem Fall egal (da ich auf der untersten Verzeichnisebene bin), aber i.A. sicher sehr nützlich.
Gibt’s dazu 'nen workaround anders als viele, viele
Einzellöschaktionen?
rm gray_???_TI*bmp
mit xargs für jede Datei rm einzeln aufrufen:
find . -name ‚gray_???_TI*bmp‘ | xargs rm
Das tut zwar was es soll, aber nicht das, was du beschrieben hast
xargs übergibt erzeugt erst mal nur ein rm, und wenn die Kommandozeile zu lange wird, startet es ein neues rm. Dadurch werden ingesamt weniger Prozesse gestartet, ist also effizienter.
Wenn man wirklich für jede Datei rm einzeln aufrufen will, kann man das so machen:
Das ist aber baeh, weil es auch auf den Dateinamen (und ich verwende bewusst die Einzahl)
gray\_ab c\_TIlaber
zeugs.bmp
matcht und rm weder gray_ab noch c_TIlaber noch zeugs.bmp finden wird. Ich empfehle hierfuer grundsaetzlich den Einsatz von -print0 fuer’s find und -0 fuer’s xargs.
Das tut zwar was es soll, aber nicht das, was du beschrieben
hast
Wenn man wirklich für jede Datei rm einzeln aufrufen will,
kann man das so machen:
Das ist aber baeh, weil es auch auf den Dateinamen (und ich
verwende bewusst die Einzahl)
gray_ab c_TIlaber
zeugs.bmp
matcht und rm weder gray_ab noch c_TIlaber
noch zeugs.bmp finden wird.
Richtig, aber in diesem Fall wohl irrelevant.
Ich empfehle hierfuer
grundsaetzlich den Einsatz von -print0 fuer’s find und -0
fuer’s xargs.
Dagegen ist nichts einzuwenden.
Wenn man wirklich für jede Datei rm einzeln aufrufen will,
kann man das so machen:
find . -name ‚gray_???_TI*bmp‘ -exec rm {} ;
Und welchen sinnvollen Gund sollte es dafuer geben?
Z.B. wenn man nichts von -print0 weiß, oder bei anderen Programmen als rm, die nur ein Argument erwarten (perl z.B. führt pro Aufruf nur ein Script auf).
Das ist aber baeh, weil es auch auf den Dateinamen (und ich
verwende bewusst die Einzahl)
gray_ab c_TIlaber
zeugs.bmp
matcht und rm weder gray_ab noch c_TIlaber
noch zeugs.bmp finden wird. Ich empfehle hierfuer
Uh… Da mir solch Kram schon viel zu häufig über den Weg gelaufen ist, versuche ich Leerzeichen soweit als möglich in Dateinamen zu meiden . Über genau solche Probleme bin ich schon häufiger gestolpert…
grundsaetzlich den Einsatz von -print0 fuer’s find und -0
fuer’s xargs.
Das tut zwar was es soll, aber nicht das, was du beschrieben
hast
Wäre mir so nicht aufgefallen. Versuche ich mir auch 'mal zu merken. Merci
Wenn man wirklich für jede Datei rm einzeln aufrufen will,
kann man das so machen: