ubuntuusers.de

Bestimmte Dateien aus mehreren Verzeichissen in ein Zielverzeichniss kopieren

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Madchaotikan

Anmeldungsdatum:
8. März 2007

Beiträge: 21

Hallo,

Folgendes Problem:

Verzeichniss /quelle enthält eine Vielzahl von Unterverzeichnissen, welche wiederum Unterverzeichnisse besitzen, welche nochmals Unterverzeichnisse beinhalten. Konkret z.B. /quelle/2008/04/28/

In diesem letzten Unterverzeichnissen befinden sich eine Reihe von Dateien, von denene ich aber nur bestimmte kopieren möchte. Nämlich jene welche auf folgenden Schlüssel passen: *pa01*0.png also [beliebige Zeichenkette] + "pa01" + [beliebige Zeichenkette] + "0.png"

Das Zielverzeichnis für alle zu kopierenden Dateien soll /ziel/ ohne weitere Unterverzeichnisse sein. Alle Dateien sollen also in ei einziges Verzeichnis kopiert werden.

Leider komme ich dort nicht mehr nur mit dem Befehl cp aus, wenn ich mich nicht vertan habe. Es wäre sehr nett, wenn mir wer bei meinem Problem helfen könnte. Danke.

Red_Radish

Anmeldungsdatum:
7. September 2007

Beiträge: 770

das geht nicht mit cp, aber in Kombination mit find etwa (ungetestet):

cd /quelle
find . -mindepth 4 -maxdepth 4 -type f -name '*pa01*0.png' -exec cp -i {} /ziel/ \;

Vorlage für die üblichen Antworten: Umschreiben mit \+ 😉

FaulFels

Avatar von FaulFels

Anmeldungsdatum:
15. August 2006

Beiträge: 97

Wohnort: Köln

Hallo Red Radish,

versuch's mal mit folgendem Befehl:

find quelle -type f -name '*pa01*0.png' -print -exec cp '{}' ziel/{} \;

Allerdings habe ich es nicht getestet!

Red_Radish

Anmeldungsdatum:
7. September 2007

Beiträge: 770

FaulFels schrieb:

Hallo Red Radish,

versuch's mal mit folgendem Befehl:

find quelle -type f -name '*pa01*0.png' -print -exec cp '{}' ziel/{} \;

Nein, das geht wohl nicht - aus "man find" (zum gesuchten '\+' '\;' zählt schon mal gar nicht )

Only one instance of `{}' is allowed within the command. The command is executed in the starting directory.

die Lösung liegt wohl bei cp:

-t, --target-directory=DIRECTORY
 copy all SOURCE arguments into DIRECTORY

Allerdings ist es dann nicht mehr portabel,...

Alci

Avatar von Alci

Anmeldungsdatum:
11. Januar 2009

Beiträge: 991

Wohnort: ~/

Ich mache soetwas einfach mit:

find /quelle -name "*pa01*0.png" -exec cp "{}" /ziel \;

diesch Team-Icon

Avatar von diesch

Anmeldungsdatum:
18. Februar 2009

Beiträge: 5072

Wohnort: Brandenburg an der Havel

Mit cp alleine geht das auch:

cp quelle/*/*/*/*pa01*0.png ziel/

Madchaotikan

(Themenstarter)

Anmeldungsdatum:
8. März 2007

Beiträge: 21

Iich habe es im Endeffekt so gemacht, wie Alci es vorgeschlagen hat:

Alci schrieb:

Ich mache soetwas einfach mit:

find /quelle -name "*pa01*0.png" -exec cp "{}" /ziel \;

Ich habe es ledglich noch um den -print Befehl erweitert, den ich analog zum Beispiel von FaulFels verwendet habe.

Prinzipiell würde wohl auch der Vorschlag von diesch funktionieren

diesch schrieb:

Mit cp alleine geht das auch:

cp quelle/*/*/*/*pa01*0.png ziel/

In meinem Fall handelt sich aber um einige zehntausend zu kopierende Dateien. Da bekomme ich folgende Fehlermeldung:

bash: /bin/cp: Argument list too long

Daher ist diese Lösung wohl nicht immer praktikabel.

Euch allen lieben Dank für eure Mühe.

Antworten |