![](https://seccdn.libravatar.org/avatar/638c5f9b9a41e53d4663197a58261c49.jpg?s=120&d=mm&r=g)
Hallo, Am Fri, 20 Sep 2013, ?l ??gn?r schrieb:
Am Fr, 20 Sep 2013 18:27:13 CEST schrieb David Haller:
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 ("*");
Ggfs. sollte man hier auch .-Dateien noch beachten: 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 ); ====
Hm, evtl. sollte man da noch ganz am Anfang von 'wanted' noch ein test auf Verzeichnis einbauen. Jup, geht: sub wanted { -d _ || return; my @t = glob ("*"); [..]
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.
Obiges gibt ja erstmal nur die Liste der Verzeichnisse aus. Und wie willst du das mit find+grep machen? Das verzwurbelt's mir das Hirn, da du erst die Verzeichnisse suchen mußt, dann gucken ob jpegs drin sind, dann in denen, die noch überbleiben gucken ob .txt drin sind ... Das gibt ein Variablen- und Quotingdesaster. Achso, getestet hab ich mit: $ tree . |-- 1 | |-- 1.jpg | `-- 11 | |-- 11.jpg | `-- 12.jpg |-- 2 | |-- 2.jpg | `-- 22 | |-- 22.jpg | `-- 22.txt |-- 3 | `-- 1.jpg -> 11.jpg |-- 4 | |-- 4.jpg | |-- 4.txt | |-- 41.JPEG | `-- 44 | |-- 41.jpg | |-- 43.jpg | `-- 44.jpg Ausgabe: $ ./findjpg.pl ./1 ./1/11 ./2 ./3 ./4/44 HTH, -dnh -- 65: Internet-Boom Schwachsinn (Theo Lieven) -- 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