Hallo, Am Die, 27 Feb 2007, Dr. Jürgen Vollmer schrieb:
Am Dienstag, 27. Februar 2007 schrieb Jens Strohschnitter:
Hallo
weiss jemand wie man über den Findbefehl eine Liste von Dateien erzeugt (inkl. Pfadangaben) die eine bestimmte Dateiendung haben ?
Also ich möchte ab einem bestimmten Verzeichnis alle Dateien auflisten die eine (Windows)-Endung wie z.B. .exe, .bat, .pif usw. haben und diese wenn möglich auch gleich löschen. Ich kenne das Kommando:
find /PATH/ -mtime +30 -type f -print -exec rm {} \;
Aber wie übergabe ich find nun die Liste mit den Endungen ?
find .... -print0 -name "*.exe" -o -name "*.bat" ... | xargs -0 rm -f
Ist aber arg nervig zum eintippen... Je nach Datenlage ist ein find ... -type f -print0 | tr '\n\0' '\0\n' \ | egrep -i '\.(exe|com|scr|dll|bat|cmd|pif)$' \ | tr '\n\0' '\0\n' | xargs -0 ls -b1 Das kommt sogar mit Dateinamen klar (zumindest bei einem kurzen Test mit "kranken Dateinamen") in denen u.a. Leerzeichen, Zeilenumbrüche, Backslashes und Anführungszeichen (' und ") vorkommen. ;) Statt dem 'ls' dann eben 'rm -f' einfügen. Ne Perl-Lösung wäre aber wohl am robustesten und am einfachsten zu tippen. perl -we 'use strict; use File::Find; find( { wanted => sub { m/\.(exe|com|scr|dll|bat|cmd|pif|txt)$/ and print "$_\n"; }, no_chdir => 1 }, ".");' Statt dem 'and print "$_\n";' zum Löschen dann 'and unlink($_);' verwenden. Verwendet man statt "." als zweites Argument des 'find'-Befehls ein @ARGV (also find( { wanted => sub { ... }, no_chdir => 1 }, @ARGV ) werden alle auf der Kommandozeile übergebenen Verzeichnisse durchsucht. Siehe auch 'perldoc File::Find'. HTH, -dnh --
Du kannst niemals einer großen Panne entgehen, in dem Du eine kleine produzierst. Aber umgekehrt. Das nennt sich dann "Windows-Bugfix". [Sascha Wirth und Sebastian Weiser in dtk] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org