Kopieren Sie Dateien und Ordner mit vollständigem Pfad in Linux-Bash

374
edoelas

Ich habe gerade ein einfaches Skript erstellt, das einen Datei- oder Ordnerpfad verwendet und ihn kopiert, wobei der vollständige Pfad in einem Ordner erhalten bleibt, der systemneben dem Skript aufgerufen wird .

Beispiel: Stellen Sie sich vor, ich habe nur diese Ordner in meinem System:

/home/my_user/copy_script /home/my_user/folder1/file1 /home/my_user/folder1/file2 /home/my_user/file3 

Wenn ich die Pfade als Argumente übergeben /home/my_user/folder1und /home/my_user/file3diese Ordnerstruktur als Ausgabe erhalten möchte:

Dateien vor dem Ausführen des Skripts

/home/my_user/copy_script /home/my_user/folder1/file1 /home/my_user/folder1/file2 /home/my_user/file3 

Neue Dateien aus dem Pfad / home / my_user / folder1 erstellt

/home/my_user/system/home/my_user/folder1/file1 /home/my_user/system/home/my_user/folder1/file2 

Neue Dateien aus dem Pfad / home / my_user / file3 erstellt

/home/my_user/system/home/my_user/file3 

Die Idee, eine Kopie der Konfigurationsdateien in einem Ordner zu haben, der mit gitlab synchronisiert wird, wobei die gleiche Struktur wie mein System erhalten bleibt.

Mein Skript sieht bis jetzt so aus:

#!/bin/bash  #need to implement relative paths #https://stackoverflow.com/questions/3963716/how-to-manually-expand-a-  special-variable-ex-tilde-in-bash/29310477#29310477  #clears the old folder rm -r ./system  #goes through all the arguments for var in "$@" do #It is a folder if [[ -d $var ]]; then mkdir -p "$PWD/system/$var" cp -R $var "$PWD/system/$var/.." echo "$var FOLDER" #It is a file elif [[ -f $var ]]; then mkdir -p "$PWD/system/$var" cp -R $var "$PWD/system/$var/.." echo "$var FILE" #The path is not ok else echo "$var ERROR" fi done 

Wenn es ein Ordner ist, denke ich, dass es gut funktioniert:

Beispiel:

Mit der gleichen Ordnerstruktur wie beim Beginn des Aufrufs copy_script /home/my_user/folder1

Zuerst wird der /home/my_user/system/home/my_user/folder1Pfad erstellt

Dann kopiert folder1in/home/my_user/system/home/my_user/

Aber mit Dateien funktioniert das nicht, weil es Ordner erstellt, die ich nicht benötige und die Dateien nicht kopieren kann.

Beispiel:

Beim Aufruf copy_script /home/my_user/file3wird der /home/my_user/system/home/my_user/file3Pfad erstellt, aber die Datei kann nicht erstellt werden, da ein Ordner mit demselben Namen vorhanden ist.

Könnte mir jemand bitte erklären, wie das geht? Vielen Dank.

1
Haben Sie versucht `rsync -r. Zielordner / `? l0b0 vor 5 Jahren 1
Ich wusste nicht, dass es dieses Werkzeug gibt, danke, das ist die Antwort, nach der ich gesucht habe. edoelas vor 5 Jahren 0

0 Antworten auf die Frage