ubuntuusers.de

Dateien mit Script kopieren

Status: Ungelöst | Ubuntu-Version: Server 20.04 (Focal Fossa)
Antworten |

Ciatronical

Anmeldungsdatum:
26. Juli 2009

Beiträge: 170

Hey All,

ich habe Symlinks die auf Verzeichnisse zeigen.

1
/src/symlinks/Ada_Lovelace_C100 -> /src/C100/

(Bem.:C100 ist die Kundennummer. Die Kundennummern wurden neu vergeben.)

Nun möchte ich die Dateien und Verzeichnisse von

1
/src/symlinks/Ada_Lovelace_C100/ 

nach

1
/dest/symlinks/ada_lovelace_C2883/

kopieren. Da es sich mehrere Symlinks handelt möchte ich das ganze in eine Schleife packen.

1
2
3
4
for name in $(find . -type l); do
   echo $name  | sed (entferne alles hinter dem letztem Underline)
   cp -R ............
done

Nun meine Frage.

1. Wie entferne ich alles hinter dem letztem Underline?

2. Wie kopiere ich etwas in ein Verzeichnis deren vollständigen Namen ich nicht kenne? ( cp /src/ada_lovelace_C100 /dest/symlinks/ada_lovelace_CXXXX )

Dank und Gruß

Ronny

fork991

Anmeldungsdatum:
26. Mai 2010

Beiträge: 58

Ciatronical schrieb:

1. Wie entferne ich alles hinter dem letztem Underline?

Suche in der manpage von bash nach %% oder remove suffix pattern. Da steht das beschrieben.

Hilfe zum man Kommando findest du hier:

https://wiki.ubuntuusers.de/man/

2. Wie kopiere ich etwas in ein Verzeichnis deren vollständigen Namen ich nicht kenne? ( cp /src/ada_lovelace_C100 /dest/symlinks/ada_lovelace_CXXXX )

Grundsätzlich ist die Frage ob das Verzeichnis ada_lovelace_CXXXX im Ziel-Vz wirklich nur einmal vorkommt. Wenn nicht erzeugst Du grosses Datenchaos. Das würde ich vorher prüfen. Ich gehe davon aus, dass Du das sicherstellst.

Beispielkopierbefehl:

cp -ax /src/ada_lovelace_C100 /dest/symlinks/ada_lovelace_C*

Die Erklärung zu cp findest Du in der cp Manpage. Das mit dem Stern (und weiteres) ist in der Manpage von bash Kapitel Pathname Expansion / Pattern Matching beschrieben.

Der Befehl ist auch problematisch, wenn kein Verzeichnis ada_lovelace_C* existiert. Auch das sollte man besser abfangen.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Find braucht keine for-Schleife, find ist selbst eine Schleife.

1
2
find  /src/symlink -type l -exec cp -t dest/symlink -ax --parents {}  + 
find /dest/symlink -type l -name "*_*" -exec rename -n 's/_[^_]+$//' {} ";"  

Man könnte Umbennenen und Kopieren auch in ein Kommandopacken, und find nur einmal laufen lassen, aber das ist unnötig kompliziert. Ob es schneller wäre, ist auch fraglich.

Das Programm rename ist nicht notwendig vorinstalliert - falls Du es in apt suchst, dann ist perl in der Beschreibung ein Indiz dafür, dass Du das richtige gefunden hast.

Das rename -n macht erst mal nichts, außer anzuzeigen was es machen würde. Es ist eine gute Idee, das immer zur Sicherheit zu benutzen und erst, wenn die Ausgabe plausibel aussieht, das Kommando ohne -n (nono) laufen zu lassen. ☺

fork991

Anmeldungsdatum:
26. Mai 2010

Beiträge: 58

@user_unkown:

Wenn ich Deinen Beitrag richtig verstehe, schneidet es die alte Kundennummer zwar ab, aber fügt die neue nicht an?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Stimmt.

Das habe ich in der Fragestellung überlesen und finde es auch jetzt, nach dem Hinweis, unklar.

Wo kommt denn die neue Nummer her?

fork991

Anmeldungsdatum:
26. Mai 2010

Beiträge: 58

Ja, ich finde das auch unklar formuliert. Ich habe das so verstanden, das im Zielverzeichnis schon Dateien/Links mit den entsprechenden Namen existieren.

@Ciatronic: Kannst Du erklären, wo die neuen Kundennummern herkommen?

Ciatronical

(Themenstarter)

Anmeldungsdatum:
26. Juli 2009

Beiträge: 170

Ja die Kundennummern werden von meiner ERP vergeben. Diese erzeugt auch die Verzeichnisse.

Die Daten aus dem altem System sollen ins neue Verzeichnis kopiert werden. Da sich die Kundennummern geändert haben.

cp -R /src/ada_lovelace_C100 /dest/symlinks/ada_lovelace*

Antworten |