ubuntuusers.de

[gelöst] Kopieren nur von bestimmten Dateitypen

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

honki

Anmeldungsdatum:
4. Juni 2005

Beiträge: 56

Wohnort: Erfurt

Hi,

gibt es einen Parameter für cp, mit dem man beim kopieren von Verzeichnissen nur bestimmte Dateitypen mitkopiert? Also wenn ich jetzt zum Beispiel einen Ordner mit .sh und .bin Dateien hab und will, dass nur die .sh Dateien kopiert werden...

MfG

pippovic

Avatar von pippovic

Anmeldungsdatum:
12. November 2004

Beiträge: 9130

Hallo,

das sollte doch mit den Jokerzeichen * und ? gehen. Also z.B. *.bin für alle .bin-Dateien.

Gruß
pippovic

haraldkl

Avatar von haraldkl

Anmeldungsdatum:
21. Juli 2005

Beiträge: 1903

Wohnort: Würselen

Meinst du das rekursiv? Die einfachste Lösung für diese Aufgabe über alle Unterverzeichnisse eines Verzeichnisses hinweg wäre (meine ich) mit rsync:

rsync -avz --include "*/" --include "*.typ" --exclude "*" srcPfad/ tgtPfad


Zum Beispiel würde alle Unterverzeichnisse aus srcPfad sowie alle darin enthaltenen Dateien, die mit .typ enden in das Verzeichnis tgtPfad kopieren. 😉

honki

(Themenstarter)

Anmeldungsdatum:
4. Juni 2005

Beiträge: 56

Wohnort: Erfurt

Meinst du das rekursiv? Die einfachste Lösung für diese Aufgabe über alle Unterverzeichnisse eines Verzeichnisses hinweg wäre (meine ich) mit rsync:
Code:
rsync -avz --include "*/" --include "*.typ" --exclude "*" srcPfad/ tgtPfad

Zum Beispiel würde alle Unterverzeichnisse aus srcPfad sowie alle darin enthaltenen Dateien, die mit .typ enden in das Verzeichnis tgtPfad kopieren. Winken

Danke, so funktioniert es! Gibt es auch ein Möglichkeit, die Dateien mit rsync zu verschieben?

Hallo,

das sollte doch mit den Jokerzeichen * und ? gehen. Also z.B. *.bin für alle .bin-Dateien.

Gruß

So hatte ich es mir auch vorgestellt, aber wie gibt man das in einem Parameter an?

haraldkl

Avatar von haraldkl

Anmeldungsdatum:
21. Juli 2005

Beiträge: 1903

Wohnort: Würselen

honki hat geschrieben:

Danke, so funktioniert es! Gibt es auch ein Möglichkeit, die Dateien mit rsync zu verschieben?

Nicht das ich wüsste, aber wenn du die Dateien rekursiv löschen möchtest geht das zum Beispiel so:

find srcPfad -name "*.typ" -print0 | xargs -0 rm

honki hat geschrieben:

So hatte ich es mir auch vorgestellt, aber wie gibt man das in einem Parameter an?

Wie meinst du das? Wenn du keine Unterverzeichnisse hast kannst du, wenn du Dateien eines bestimmten Typs verschieben willst einfach durch:

mv srcPfad/*.typ tgtPfad


aus dem srcPfad in das tgtPfad verschieben. Vielleicht interessiert dich auch hier das: bash:mmv

honki

(Themenstarter)

Anmeldungsdatum:
4. Juni 2005

Beiträge: 56

Wohnort: Erfurt

Also erstmal danke für deine Antworten:

rsync -avz --include "*/" --include "*.typ" --exclude "*" srcPfad/ tgtPfad && find srcPfad -name "*.typ" -print0 | xargs -0 rm


...macht genau das, was ich eigentlich wollte. Dummerweise ist mir das ein wenig zu lang :p

Ich versuch nochmal zu erklären, wie ich mir das vorstelle:

Ich habe zum Beispiel folgende Verzeichnissstruktur:
~/foo/bar/shallala.txt shubidubi.sh
~/foo/bar2/schakadaka.sh schubdidub.txt

Und möchte es dann so haben:
~/foo/bar/shallala.txt
~/foo/bar2/schubdidub.txt

Also im Prinzip soll ein bestimmter Dateityp rekursiv verschoben werden. Mit mmv ist das glaub ich nicht möglich. Immerhin hab ich dank dir jetzt eine Möglichkeit, wie es geht (auch wenn es ein bischen umständlich ist)...

Edit:
Hab mir jetzt ein kleines Script dafür geschrieben. Für den Fall, dass es jemand außer mir benötigen sollte:

#!/bin/bash

clear
SRCDIR=
TRGDIR= 
FILETYP=

echo "Quellverzeichnis: "
read SRCDIR
echo ""
echo "Zielverzeichnis: "
read TRGDIR
echo ""
echo "Dateityp: "
read FILETYP
echo ""

rsync -avz --include "*/" --include "*.$FILETYP" --exclude "*" $SRCDIR $TRGDIR
find $SRCDIR -name "*.$FILETYP" -print0 | xargs -0 rm

haraldkl

Avatar von haraldkl

Anmeldungsdatum:
21. Juli 2005

Beiträge: 1903

Wohnort: Würselen

Hi,
du könntest auch Parameter verwenden, und dein Skript dann in der Form:

recmv srcdir tgtdir "*.typ"


aufrufen:

#!/bin/bash
#script recmv, zum recursiven Verschieben von Dateien eines Typs

if [ $# -lt 3 ] ; then
   echo "recmv, Verwendung:"
   echo 'recmv srcdir tgtdir "muster"'
   echo "Verschiebt rekursiv alle Dateien auf die muster passt, sowie alle Unterverzeichnisse"
   echo "aus dem Verzeichnis srcdir in das Verzeichnis tgtdir."
   exit 1
fi

echo "Verschiebe $3 aus $1 in $2:"
rsync -avz --include "*/" --include "$3" --exclude "*" $1 $2
find $1 -name "$3" -print0 | xargs -0 rm


Das hätte den Vorteil, dass es sich leichter in anderen Skripten einbinden lässt 😉
Tab-Completion könnte man dann gleich auch noch benutzen...

honki

(Themenstarter)

Anmeldungsdatum:
4. Juni 2005

Beiträge: 56

Wohnort: Erfurt

Danke schön ☺ (Das vorhin war mein erster Versuch, überhaupt erstmal ein lauffähiges Skript hinzubekommen ☺ )

haraldkl

Avatar von haraldkl

Anmeldungsdatum:
21. Juli 2005

Beiträge: 1903

Wohnort: Würselen

Antworten |