2016-04-27 10 views
1

HintergrundBash-Skript - For-Schleife -exec cp finden produziert Fehler: cp: Weglassen Verzeichnis

Ich habe zwei Ordner mit Bildern ... Ordner eine der Hauptordner mit Tausenden von farbigen Bildern. FOLDER TWO ist ein gefilterter Ordner mit Dingen, nach denen ich in FOLDER ONE gesucht habe, aber die Bilder in FOLDER TWO sind schwarz und weiß.

Besonderer Hinweis – die Dateinamen der Bilder in zwei Ordner sind die gleichen wie in FOLDER ONE + einige andere Informationen danach (aber vor der Jpeg-Erweiterung).

Mein Ziel

Suche Ordner eine für den Anfangsteil des Namens der Dateien in zwei Ordner (so dass ich die farbige Kopie der Bilder bekomme ich gefiltert haben), und dann diejenigen kopieren Bilder in einen anderen Ordner namens PASS FOLDER.

Mein Code

note – FOLDER EINS, ZWEI, PASS FOLDER = F1, F2, PASSED (jeweils)

for doc in F2/* 
do 
    name=`basename $doc`; 
    name=${name%-*}; 
    find /home/user/F1/ -name "$name*" -exec cp {} /home/user/PASSED/ \;; 
done 

Mein Problem

Ich erhalte der Fehler

cp: omitting directory '/home/user/F1/'

Bitte helfen! Ich denke, das sollte sehr einfach sein, es hat ständig Probleme. Ich habe auch jeden einzelnen Teil der for-Schleife selbst getestet und sie funktionieren. Ich denke, die For-Schleife bringt etwas durcheinander, aber ich verstehe nicht warum.

Antwort

1

Das Problem ist, dass findcp Verzeichnisse zu kopieren und Sie nur Dateien kopieren möchten. So ersetzen:

find /home/user/F1/ -name "$name*" -exec cp {} /home/user/PASSED/ \; 

mit:

find /home/user/F1/ -type f -name "$name*" -exec cp {} /home/user/PASSED/ \; 

Thw Prädikat -type ffind sagt für reguläre Dateien nur entsprechen, keine Verzeichnisse.

+0

Das war es! Vielen Dank! Ich war eine Weile steckengeblieben. – AmericanMade

0

einfach -r Parameter hinzufügen. nach cp

find /home/user/F1/ -name "$name*" -exec cp -r {} /home/user/PASSED/ \;;