Linux cp nur einzelnde Datentypen

Guten Tag,

Ich möchte einen recusiven cp befehl schreiben der aber nur einen Datentyp kopiert.

ich hab beispielsweiße:
/ordner1/
. - uordner1/
. . - datei1.sh
. . - datei2.sh
. . - datei3.mp3
. - uordner2/
. . - datei1.wmi
. . - datei2.sh
. . - datei3.mp3
. - uordner3/
. . - datei1.txt

und möchte alle dateien vom type sh in den entsprechenden unterordnern haben. Beispielsweiße so:

/ordner2/
.- uordner1/
. . - datei1.sh
. . - datei2.sh
. - uordner2/
. . - datei2.sh

ich hab bisher:
cp -R /ordner1/*.sh /ordner2/

aber es kommt immer dieser fehler:
cp: cannot stat `/ordner1/*.sh’: No such file or directory

Hey,
also ohne groß drüber nach zu denken vermute ich, dass es geht, wenn du das ‚/‘ vor den Ordnern weg lässt. Also:
cp -R ordner1/*.sh ordner2/

Das / davor würde heißen, dass der Ordner im root Verzeichnis liegt :wink:

lg

Ich möchte einen recusiven cp befehl schreiben der aber nur
einen Datentyp kopiert.
cp -R /ordner1/*.sh /ordner2/

Das klappt nicht, da der Stern von der Shell expandiert wird. Was dabei passiert kann man mit ls /ordner1/*.sh ansehen. Dieser copy wird alle *.sh Dateien im ordner1 in ordner2 kopieren.

cp: cannot stat `/ordner1/*.sh’: No such file or directory

Das heißt, dass es /ordner1/*.sh nicht gibt! Da die *.sh Dateien in Unterordnern von /ordner1 liegen, ist das zu erwarten.

cp kann das nicht. In bash kann man die Aufgabe mit einem Einzeiler lösen:

for f in find /ordner1 -type f -name '*.sh'; do install -D „$f“ „/ordner2${f##/ordner1}“; done

es war schon richtig mit dem „/“ davor aber das war ja eigentlich auch nicht das Problem. Trotzdem Danke

Danke das funktioniert wunderbar :smile: mal gleich auseinander nehmen um zu gucken wie das ding funktioniert. Danke Danke nochmal

geht das irgendwie auch mit Ordnern? ich hab hier und da was geändert aber ich schaffe das ganze nur in der for schleife

also ich hab bisher:
for f in find /ordner1 -type d -name '*ordner1*'; do install -D „$f“ „/ordner2${f##/ordner1}“; done

Was genau hast Du denn vor?

Was genau hast Du denn vor?

ordner mit kompletten ihnhalt kopieren

Hallo,
ich versuche zu helfen mit einer Gegenfrage:
kann es sein, dass der cp-Befehl in einem Script ausgeführt wird ?
Wurde dieses Script mit einem Windows Editor erstellt?
Falls ja, bitte das Script in einem Unix Editor wie z.B. Vi erstellen und speichern. Danach dürfte keine Fehlermeldung mehr erscheinen. Das Stichwort hierzu wäre: falsche EOL Zeichen !

ist mit nano erstellt.

Was genau hast Du denn vor?

ordner mit kompletten ihnhalt kopieren

Also, Du hast Ordner die heißen copy_me.* unter /ordner1, die mit Inhalt in /ordner2 kopiert werden sollen. Das müsste ungefähr wie folgt klappen:

for d in find /ordner1 -type d -name "copy_me.*";do mkdir -p „/ordner2${d##/ordner1}“;cp -aR „$d“ „/ordner2${d##/ordner1}“;done

sowas wie /ordner1/copy_me.1/copy_me.2 wird dann zwar doppelt kopiert, macht aber nix. Wenn die Ordner direkt unter /ordner1 hängen, müsste es cp auch direkt können:

cp -aR /ordner1/copy_me.* /ordner2

Das kopiert aber auch Dateien die copy_me.* heißen. Sonst kann man bei find ein -maxdepth einwerfen.

Es gibt eben immer mehrere Wege.

funktioniert fast so wie ich es wollte :smiley:

nur irgendwie macht der aus:
/ordner1/uordner1/ [Dateien]
das hier:
/ordner1/uordner1/uordner1/ [Dateien]

funktioniert fast so wie ich es wollte :smiley:

nur irgendwie macht der aus:
/ordner1/uordner1/ [Dateien]
das hier:
/ordner1/uordner1/uordner1/ [Dateien]

ich habs schon:
for d in find /ordner1 -type d -name "copy_me.*";do mkdir -p „/ordner2${d##/ordner1}“;cp -aR „$d“ „/ordner2${d##/ordner1}/…“;done

for d in find /ordner1 -type d -name "copy_me.*";do mkdir -p
„/ordner2${d##/ordner1}“;cp -aR „$d“
„/ordner2${d##/ordner1}/…“;done

Stimmt, versuch mal cp -aR „$d/*“ „/ordner2${d##/ordner1}“.
Im Zweifelsfall hilft immer vor den Befehl ein echo zu schreiben, um zu sehen was genau passiert.

cool, Danke

Guten Tag,

Ich möchte einen recusiven cp befehl schreiben der aber nur
einen Datentyp kopiert.

ich hab bisher:
cp -R /ordner1/*.sh /ordner2/

aber es kommt immer dieser fehler:
cp: cannot stat `/ordner1/*.sh’: No such file or directory

Nimm für solche Geschichten lieber rsync, das arbeitet auch rekursiv
und kann noch viel mehr, unter anderem auch über verschiedene Rechner.

Gruss,
Marcus

Hi

versuche mit dem folgenden Befehl:

find ./ -name „*.[ct][sx][vt]“ -exec cp {} newfolder ;

Beispiel:
find ./ordner01 -name „*.[sh][pm3][doc]“ -exec cp {} ./ordner02 ;

Frohes gelingen

MfG

Gafur Aliti

Ist Dein Problem inzwischen gelöst?
Wenn nicht, versuch mal folgendes:
erstelle im Ordner1 eine Datei leer.sh oder so
wichtig: sie muss Deinen Kriterien zum kopieren entsprechen.
Danach sollte es funktionieren.