Hallo. On Friday 20 September 2013 20:47:16 Аl Воgnеr wrote:
Am Fr, 20 Sep 2013 18:27:13 CEST schrieb David Haller:
Hallo,
Am Fri, 20 Sep 2013, ?l ??gn?r schrieb:
Wie suche ich alle Verzeichnisse, die eine *.jpg-Datei enthalten, aber _keine_ *.txt Datei
alternativ alle Verzeichnisse mit *.jpg-Datei als normale Datei oder als (kaputter) Link und _keine_ *.txt Datei
Das geht mit find nicht. Aber mit perl.
Ohne Sonderbehandlung kaputter symlinks:
==== #!/usr/bin/perl -w use strict; use File::Find;
my %found;
sub wanted { my @t = glob ("*"); my $jpg = grep { /\.jpg$|\.jpeg$/i; } @t; my $txt = grep { /\.txt$/i; } @t; if( $jpg > 0 && $txt == 0 ) { if( ! $found{$File::Find::dir} ) { print "$File::Find::dir\n"; $found{$File::Find::dir}++; } } }
scalar @ARGV || push(@ARGV, "."); File::Find::finddepth( { no_chdir => 0, wanted => \&wanted, }, @ARGV ); ====
danke David. Könnte man da nicht ein find mit einem grep kombinieren um einen Überblick zu bekommen? Automatisches Löschen finde ich in diesem Fall gefährlich, da ich einen Denkfehler bei den genannten Bedingungen haben könnte.
-- Αl
Wenn dir die Perl-Loesung nicht gefaellt - fuer einen Ueberblick geht folgendes: Mit find eine Liste der Verzeichnisse erstellen und in einer Datei ablegen, die Jpegs enthalten: find . -type f -name '*jpg' -exec dirname {} \;|uniq|sort >jpg Dasselbe nochmal mit txt-Dateien: find . -type f -name '*txt' -exec dirname {} \;|uniq|sort >txt Jetzt haben wir also eine Datei, in der die Verzeichnisse aufgelistet sind, in denen Bilder liegen, und eine mit den Textdateien - natuerlich ueberschneiden sich die Listen. Das muessen wir noch rausfiltern: Vergleich der Listen mit comm: comm -2 -3 jpg txt ergibt dann saemtliche Verzeichnissse, die nur Bilder enthalten, comm -1 -3 jpg txt alle mit nur Textdateien und comm -1 -2 jpg txt alle gemischten Verzeichnisse. Auf kaputte Symlinks habe ich jetzt keine Lust ;-) Gruss, Hartwig -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org