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, 5272 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
Neue Wissensbeiträge
Batch & Shell

Batch - ein paar Basics die man kennen sollte

Tipp von Pedant zum Thema Batch & Shell ...

Microsoft

Restrictor: Profi-Schutz für jedes Window

(6)

Tipp von AlFalcone zum Thema Microsoft ...

Batch & Shell

Batch zum Zurücksetzen eines lokalen Profils

Tipp von Mr.Error zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
gelöst Benutzer lässt sich nur an einem Clientcomputer anmelden (17)

Frage von Ammann zum Thema Windows Server ...

Netzwerke
SFP Modul (miniGibic) (11)

Frage von apranet zum Thema Netzwerke ...

Batch & Shell
gelöst Gruppenzugehörigkeit von AD Usern ermitteln - die Perfektion fehlt (11)

Frage von Stefan007 zum Thema Batch & Shell ...