Rekursiv kopieren inkl. Verzeichnissen, Verzeichnisbaum
cp -r und cp -P bewirkt das nicht
Wie kann ich unter Linux eine Datei unter Beibehaltung der Verzeichnisstruktur kopieren? Wenn das Verzeichnis (Ordner) nicht existiert, soll es erstellt werden:
cp /das/ist/die/datei.txt /tmp
Ergebnis: /tmp/das/ist/die/datei.txt
Wie kann ich unter Linux eine Datei unter Beibehaltung der Verzeichnisstruktur kopieren? Wenn das Verzeichnis (Ordner) nicht existiert, soll es erstellt werden:
cp /das/ist/die/datei.txt /tmp
Ergebnis: /tmp/das/ist/die/datei.txt
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 195791
Url: https://administrator.de/contentid/195791
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
8 Kommentare
Neuester Kommentar
Dann kann er aber nur sagen
cp -r /das /tmp
und es landet alles was unter /das liegt in /tmp, oder täusch' ich mich?
Also z.B. auch /das/datei-xyz oder das/ist/datei-abc.
Kann natürlich sein, dass das genau das ist was er möchte, aber ich habe es so verstanden, dass er nur /das/ist/die/datei.txt kopieren will (inklusive der darüber liegenden Verzeichnisstruktur), nicht aber andere Dateien die eventuell noch in den höheren Verzeichnissen liegen.
cp -r /das /tmp
und es landet alles was unter /das liegt in /tmp, oder täusch' ich mich?
Also z.B. auch /das/datei-xyz oder das/ist/datei-abc.
Kann natürlich sein, dass das genau das ist was er möchte, aber ich habe es so verstanden, dass er nur /das/ist/die/datei.txt kopieren will (inklusive der darüber liegenden Verzeichnisstruktur), nicht aber andere Dateien die eventuell noch in den höheren Verzeichnissen liegen.
So... hat ein Weilchen gedauert, aber was soll man während der Arbeitszeit auch sonst machen *lol*
#!/bin/bash
#-------------------------------------------------------
FILE=datei
FOLDER=das
TOPFOLDER=/home/user/
DEST=/tmp
#-------------------------------------------------------
cd $TOPFOLDER
DIR=$(find $FOLDER -name $FILE)
LIST=$(echo $DIR | tr "/" "\n")
cd $DEST
for i in $LIST
do
[ $i != $FILE -a ! -e $i ] && mkdir $i
if [ $i != $FILE ]; then
cd $i
else
cp $TOPFOLDER$DIR .
fi
done
FILE ist der Dateiname
FOLDER ist das Verzeichnis ab dem kopiert werden soll
TOPFOLDER muss (wie der Name schon erahnen lässt) das Verzeichnis über FOLDER sein
DEST ist das Zielverzeichnis
So wie es oben steht kopierte das Skript die Datei
/home/user/das/ist/die/datei
nach
/tmp/das/ist/die/datei
Das "find" kann man natürlich auch weglassen und den Pfad zur Datei direkt angeben, dann spart man sich auch die TOPFOLDER-Geschichte.
- BEGIN -------------------------------------------------------
#!/bin/bash
#-------------------------------------------------------
FILE=datei
FOLDER=das
TOPFOLDER=/home/user/
DEST=/tmp
#-------------------------------------------------------
cd $TOPFOLDER
DIR=$(find $FOLDER -name $FILE)
LIST=$(echo $DIR | tr "/" "\n")
cd $DEST
for i in $LIST
do
[ $i != $FILE -a ! -e $i ] && mkdir $i
if [ $i != $FILE ]; then
cd $i
else
cp $TOPFOLDER$DIR .
fi
done
- END ------------------------------------------------------
FILE ist der Dateiname
FOLDER ist das Verzeichnis ab dem kopiert werden soll
TOPFOLDER muss (wie der Name schon erahnen lässt) das Verzeichnis über FOLDER sein
DEST ist das Zielverzeichnis
So wie es oben steht kopierte das Skript die Datei
/home/user/das/ist/die/datei
nach
/tmp/das/ist/die/datei
Das "find" kann man natürlich auch weglassen und den Pfad zur Datei direkt angeben, dann spart man sich auch die TOPFOLDER-Geschichte.