ubuntuusers.de

Dateien copieren und umbenennen

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

wenze

Avatar von wenze

Anmeldungsdatum:
9. August 2006

Beiträge: 161

Wohnort: vergessen

Hallo Alle,

ich habe wieder einmal ein sicherlich simples Problem aber irgendwie ḱomme ich nicht zurecht.

Ich habe ein Verzeichnis in dem ich meine Skripte mit der Versionsnummer im Dateinamen versehen habe. Nun möchte ich mir ein Skript schreiben mit dem ich diese Dateien verteile (kopiere) und umbenenne.

Tipps und Hilfe wird gern angenommen 😉

Danke schon einmal

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
TARGET_PATH=/scripts
FILES=backup_$1.sh

FILE_LIST=( $(`find $SOURCE_PATH -name "*$FILES*" -type f`) )

for SOURCE_FILE in "${FILE_LIST}"
do
BASENAME_FILE=`basename $SOURCE_FILE`
TRAGET_FILE=`sed -e 's/_\$1\.sh/_\$UPPERSID\.sh/'`
cp .....

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Wohnort: Sachsen

Was ist jetzt deine Frage?

Am besten du beschreibst erstmal, was konkret du tun willst. Wie sieht eine Beispieldatei aus, und was soll das Ziel sein?

apt-ghetto

Anmeldungsdatum:
3. Juni 2014

Beiträge: 2943

wenze schrieb:

ich habe wieder einmal ein sicherlich simples Problem aber irgendwie ḱomme ich nicht zurecht.

Möchtest du uns das Problem dann auch erklären?

Tipps und Hilfe wird gern angenommen 😉

Eigene Variablen werden klein geschrieben, damit sie keine existierende Systemvariablen überschreiben.

Backticks solltest du grundsätzlich nicht mehr verwenden, sondern

1
$(basename $variable)

(Zeilen 8,9 und insbesondere Zeile 4)

wenze

(Themenstarter)
Avatar von wenze

Anmeldungsdatum:
9. August 2006

Beiträge: 161

Wohnort: vergessen

Ok,

ich möchte folgenden Ablauf generieren:

  1. finde alle Dateien der Versionsnummer und lese sie in ein Array → habe ich ja schon mal alles bis Zeile 4

  2. lese das Arry aus und kopiere die Quelldatei mit neuen Namen nach /scripts

Bearbeitet von rklm:

Aufzählung

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Vorab - zusätzlich zu dem was apt-ghetto schon angemerkt hat - noch 2 Dinge zum Handwerklichen:

  1. Hast Du schon mal etwas von "Quoting" gehört ? - bei Dir sind die Gänsefüßchen bisher doch eher zufällig verteilt ... und das wird nix.

  2. Die Ausgabe von find zu parsen geht beim ersten Leerzeichen garantiert glatt vor die Wand ! - ein No-Go.
    → Nimm eine einfache File Expansion direkt in der for- Schleife und gut is'.
    - - Oder wenn Du unbedingt einen Verzeichnisbaum abgrasen willst, dann mit find .... -exec \; und einer Untershell, das geht auch. (dafür gibt's 'zig Beispiele hier im Strang !)

Das mit einem Array würde ich nicht machen. Ist zwar möglich, aber dann nur über Null-terminierte Strings und eine while read - Schleife. (→ Guck's Dir mal in Greg's Wiki an !)

LG,

track

unbuntuS12

Anmeldungsdatum:
2. Juni 2010

Beiträge: 1816

Hallo.

Tipp 1: Versionsverwaltungssoftware verwenden: git.

Tipp 2: Für exakt deinen Anwendungsfall gibt es multimove.

wenze

(Themenstarter)
Avatar von wenze

Anmeldungsdatum:
9. August 2006

Beiträge: 161

Wohnort: vergessen

Erst einmal Danke,

für den Hinweis mit dem Handwerklichen und die Links zum lesen.(Ja, mir fehlen noch einiges an Erfahrungen ) Da ich ich leider nicht nur Linux sondern auch AIX, .... bedienen muss, ich auch keine "Rechte" auf den Zielsystemen habe, fallen git und multimove weg. Deshalb die Idee mit einem einfachen Skript.

Gruß wenze

unbuntuS12

Anmeldungsdatum:
2. Juni 2010

Beiträge: 1816

Ah, ok, dann ist der Ansatz mit dem Skript natürlich legitim. Allerdings kommt gleich Tipp 3: Du musst gar nicht global installieren, sondern kannst Programme oft auch lokal nutzen. Du kannst dir z.B. einfach den Quellcode von mmv holen, kompilieren und damit arbeiten. Alles mit Nutzerrechten.

Antworten |