Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Rekursiv kopieren inkl. Verzeichnissen, Verzeichnisbaum

Frage Linux

Mitglied: lexa-lexa

lexa-lexa (Level 1) - Jetzt verbinden

13.12.2012 um 02:35 Uhr, 5171 Aufrufe, 8 Kommentare

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

Mitglied: b.enni
13.12.2012 um 06:36 Uhr
Moin,

-r
--recursive

Bei man cp brauchst du noch nicht mal weit runterscrollen...

Grüße,
Benni
Bitte warten ..
Mitglied: nevermind2012
13.12.2012 um 07:48 Uhr
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.
Bitte warten ..
Mitglied: lexa-lexa
13.12.2012, aktualisiert um 14:49 Uhr
Hi Benni,

Bei man cp brauchst du noch nicht mal weit runterscrollen...

du hast die Problemstellung nicht verstanden.

Und drüber steht auch ganz fett: "cp -r und cp -P bewirkt das nicht"

Probier's bitte nochmal, falls du ausser Hinweisen auf die manpages noch mehr drauf hast.
Fürchterlich, diese ManPage-Schluckreflexe der vermeintlichen Linux-Kenner

Gruss Axel

edit: Anrede + Ironie
Bitte warten ..
Mitglied: lexa-lexa
13.12.2012 um 14:46 Uhr
Zitat von nevermind2012:
...ich habe es so verstanden, dass er nur
/das/ist/die/datei.txt kopieren will

Korrekt! Nur einzelne Dateien inkl. deren Pfad. Nicht komplette Pfade, das wäre ja zu einfach
Bitte warten ..
Mitglied: nevermind2012
13.12.2012 um 16:12 Uhr
So... hat ein Weilchen gedauert, aber was soll man während der Arbeitszeit auch sonst machen *lol*

  1. 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

  1. 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.
Bitte warten ..
Mitglied: lexa-lexa
13.12.2012 um 18:46 Uhr
Zitat von nevermind2012:
So... hat ein Weilchen gedauert, aber was soll man während der Arbeitszeit auch sonst machen *lol*

Danke Dir für die Inspiration!

Dein Script kann so nicht verwendet werden, denn es geht natürlich nicht um *eine* Datei, die hätte ich schnell mal händisch kopiert, sondern eine Dateiliste. Da dort einige Dateinamen doppelt vorkommen, wird das Script vermutlich am "find" Befehl ins Stolpern kommen.

Habe gerade auch (aber *nach* der Arbeit ) wieder Lust zum scripten bekommen und eine Stunde lang vergeblich versucht es hinzubekommen. Problem war immer wieder, dass der letzte Parameter, der ja der Dateiname war, als Verzeichnis erstellt wurde:
#!/bin/bash 
 
FLIST="files.txt" 
 
while read F ; do 
 
   DEST="/tmp/test1" 
   LIST=$(echo $F | tr "/" "\n") 
 
   for i in $LIST ; do 
      DEST="$DEST/$i" 
      echo "Ziel: $DEST" 
      if [ ! -d $DEST ] && [ ! -f $DEST ] ; then 
         mkdir $DEST 
      fi 
   done 
 
done < $FLIST
Das war mir dann doch zu doof, weil es unmögliche Ausmasse annimmt. Daher habe ich mich nun entschlossen, kurzen Prozess zu machen und TOPFOLDER zu ignorieren:
#!/bin/bash 
 
FLIST="files.txt" 
DEST="/tmp" 
 
while read F ; do 
 
   cp -r --parents $F $DEST 
 
done < $FLIST
PS: Eigentlich ging ich davon aus, dass "cp -P" dasselbe ist wie "cp --parents", es gibt aber scheinbar Unterschiede in den Distris. Aktuell bewege ich mich auf einer älteren SuSE. Werde gelegentlich mal bei Debian nachschauen.
Bitte warten ..
Mitglied: b.enni
14.12.2012 um 06:21 Uhr
Moin lexa,

dann entschuldige meine unqualifizierte Antwort.
Ich habe die Frage falsch verstanden und das fett geschriebene dazu noch überlesen - war alles vor dem ersten Kaffee.
Bitte warten ..
Mitglied: lexa-lexa
14.12.2012 um 14:56 Uhr
Hi Benni,

wird gern angenommen. Vor dem ersten Kaffe ist (fast) alles entschuldbar
Bitte warten ..
Ähnliche Inhalte
Windows Server
gelöst EXE Datei per GPO auf Desktop für alle User kopieren (8)

Frage von haiflosse zum Thema Windows Server ...

Batch & Shell
gelöst Daten via Aufgabenplanung auf ein SMB Ziel kopieren (8)

Frage von eBBeL87 zum Thema Batch & Shell ...

Batch & Shell
gelöst Verzeichniss überwachen Datei kopieren und umbenennen (6)

Frage von fischle63 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(6)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(5)

Anleitung von BassFishFox zum Thema Windows 10 ...

Administrator.de Feedback

Tipp: Ungelöste Fragen ohne Antwort in Tickeransicht farblich hinterlegen

Tipp von pattern zum Thema Administrator.de Feedback ...

Viren und Trojaner

Neue Magazin Ausgabe: Malware und Angriffe abwehren

Information von Frank zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
Windows Server
gelöst Update BackupExec 2015 auf 2016 führt zu SQL-Server Problem (16)

Frage von montylein1981 zum Thema Windows Server ...

Batch & Shell
gelöst Batch um Benutzer aus Sitzung abzumelden (15)

Frage von zeroblue2005 zum Thema Batch & Shell ...

Linux
gelöst Google Chrome startet nicht (12)

Frage von Thomas91 zum Thema Linux ...