2016-11-17 1 views
1

Ich bin neu (ish) zu Bash und ich versuche herauszufinden, wie man ein paar verschiedene Dinge in einem Skript kombinieren.Bash: Listen Verzeichnisse mit einem Dateityp, aber einen anderen Dateityp fehlt

Ich suche nach Dateiübertragungen, die unterbrochen wurden. Diese Ordner enthalten Bilddateien (entweder jpgs oder png), aber eine andere spezifische Datei (final.txt) fehlt.

Hier ist, was ich verwende Ordner mit Bildern zu finden (von here):

for f in */incoming/ ; do 
    log_f="${f//\//}" 
    echo "searching $f" 
    find "$f" -iname "*jpg*" -o -iname "*png*" > "/output/${log_f}.txt" 
    echo "$f finished" 
done 

Dann Ich bin mit diesem Befehl Ordner zu finden, die finished.txt Datei fehlt (von here):

find -mindepth 2 -maxdepth 2 -type d '!' -exec test -e "{}/finished.txt" ';' -print 

gibt es eine Möglichkeit, sie zu kombinieren, so habe ich eine Liste von Ordnern, die jpg oder png-Dateien, aber tun haben nicht finished.txt? Auch wenn ich -mtime hinzufügen möchte, wo stelle ich das hin?

Alternativ, wenn es eine bessere/schnellere Möglichkeit gibt, dies zu tun, interessiert mich das auch.

Danke!

Antwort

0

Vom ersten Durchlauf an, wenn Sie die Dateien mit jpg/png erhalten, können Sie das Verzeichnis unter Verwendung von dirname erhalten. Die Liste der Verzeichnisse kann dann verwendet werden, um die Datei final.txt zu durchlaufen und nach ihnen zu suchen. Bei der Suche können Sie das Verzeichnis überspringen, wenn Sie es nicht ausdrucken. „| Sortieren | uniq“

Etwas wie unten sollte die nötige

for i in `find "$f" -iname "*jpg*" -o -iname "*png*" -exec dirname {} \;` 
do 
    ls $i | grep finished >/dev/null 
    if [ $? -eq 1 ]; then 
     echo $i 
    fi 
done 

Fügen Sie am Ende des find-Befehls, um vielleicht die Duplikate zu entfernen. So etwas wie

find "$ f" -iname "jpg" -o -iname "png" exec dirname {} \; | sortieren | uniq

+0

Danke dafür. Aus irgendeinem Grund bekomme ich das: 'finden: '': Keine solche Datei oder Verzeichnis's – Amy

+0

Ich hoffe, Sie setzen f, die im obigen Befehl" $ f "parametrisiert ist. Also etwas wie f =/Benutzer/Gast/meinVerzeichnis, gefolgt von dem Ausführen des obigen Befehls. –