Mailinglist Archive: opensuse-de (1962 mails)

< Previous Next >
Re: Kleines Skriptproblem
  • From: David Haller <lists@xxxxxxxxxx>
  • Date: Tue, 1 Aug 2006 21:19:08 +0000 (UTC)
  • Message-id: <20060801185330.GB3798@xxxxxxxxxxxxxxxxxx>
Hallo,

Am Die, 01 Aug 2006, Achim Schäfer schrieb:
>ich habe auch noch einen Vorschlag. Das ganze kannst Du auch direkt mit
>find erledigen. Das kann durchaus mit logischen Operatoren arbeiten.
>(Siehe 'man find'.)
>
>Du könntest also so etwas schreiben (ungetestet):
>
>find /test ! -name "*Exclude1*" ! -name "*Exclude2*" -mtime +30 -type f

Die '!' muss man quoten oder escapen. => History expansion.

find /test -type f -mtime +30 -not -name '*foo*' -not -name '*bar*'

>und dann muss dahinter zum Löschen natürlich noch ein:
>-exec rm -fr {} \;
>oder besser noch:
>-print0 | xargs -0 rm -fr

Das '-r' ist glaube ich nicht gewollt.

-print0 | xargs -r -0 rm -f

Der Vollstaendigkeit halber: die anderen "Loesungen" mit sed sind
allesamt anfaellig bist falsch.

Uebrigens kann man mit Perl Schwierigkeiten auch umgehen. Mit
'find2perl' gibt's sogar Hilfe ;) Gleich angepasst und um die Excludes
ergaenzt:

====
#!/usr/bin/perl -w
use strict;
use File::Find;

sub wanted {
-f _ ### -type f
&& (int(-M _) > 30) ## -mtime +30
&& ! m/EXCLUDE_REGEX_ONE/
&& ! m/EXCLUDE_REGEX_TWO/
&& unlink($File::find::name); ### rm -f
}

# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, '.');
exit(0);
====

-dnh

--
> Womit erstellt ihr so eure Homepages?
mit vim *g*. Wobei es Leute gibt, die tatsächlich behaupten, das soll
auch mit diesem Betriebssystem - wie heißt es doch gleich - *äh* Emacs
gehen. [> Bernd Stäglich und Philipp Zacharias in suse-linux]

< Previous Next >
Follow Ups