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
cp /das/ist/die/datei.txt /tmp
Ergebnis: /tmp/das/ist/die/datei.txt
Please also mark the comments that contributed to the solution of the article
Content-Key: 195791
Url: https://administrator.de/contentid/195791
Printed on: May 4, 2024 at 07:05 o'clock
8 Comments
Latest comment
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.