Dateien verschieben über die shell mit bashscript
Moin admins,
folgende Frage:
Ich habe zwei Files, die ich gerne unabhängig voneinander mit einem bash scirpt via cron in zwei unterschiedliche Ordner verschieben will.
Das Problem ist, die beiden Dateien heissen ähnlich. es sind Dateien, die Preise aus meinem ERP enhalten. Die eine Datei ist aber ein Vollexport, der alle Preise enthält und die andere eine Einzeldatei, die immer nur einzelne Presie enthält.
Jetzt heisst der Vollexport:
Preis__Datum_Uhrzeit.txt
Der Einzelexport
Preis_Artikel_Datum_Uhrzeit.txt.
abgesehen von "Artikel" und den 3 Stellen unterscheiden sich die zwei Files in einem Doppelunterstrich und einem Einzelunterstrich.
Ich dachte also., das Script um beide Datein unterschiedlich zu verschieben, könnte so aussehen:
mv Preis__*_*.txt /ordner
mv Preis_*_*_*.txt /ordner2
Dummerweise erkennt aber die bash den Unterschied zwischen Einzel und Doppelleerzeichen und auch den 2 oder 3 Stellen anscheind nicht und verschiebt bei beiden Befehln jeweils beide Files. Dummerweise finde ich dazu jetzt nichts, wie ich die beiden Files unterscheidlich behandeln kann.
Hat da jemand eine Idee? Danek schonmal
Greetz
folgende Frage:
Ich habe zwei Files, die ich gerne unabhängig voneinander mit einem bash scirpt via cron in zwei unterschiedliche Ordner verschieben will.
Das Problem ist, die beiden Dateien heissen ähnlich. es sind Dateien, die Preise aus meinem ERP enhalten. Die eine Datei ist aber ein Vollexport, der alle Preise enthält und die andere eine Einzeldatei, die immer nur einzelne Presie enthält.
Jetzt heisst der Vollexport:
Preis__Datum_Uhrzeit.txt
Der Einzelexport
Preis_Artikel_Datum_Uhrzeit.txt.
abgesehen von "Artikel" und den 3 Stellen unterscheiden sich die zwei Files in einem Doppelunterstrich und einem Einzelunterstrich.
Ich dachte also., das Script um beide Datein unterschiedlich zu verschieben, könnte so aussehen:
mv Preis__*_*.txt /ordner
mv Preis_*_*_*.txt /ordner2
Dummerweise erkennt aber die bash den Unterschied zwischen Einzel und Doppelleerzeichen und auch den 2 oder 3 Stellen anscheind nicht und verschiebt bei beiden Befehln jeweils beide Files. Dummerweise finde ich dazu jetzt nichts, wie ich die beiden Files unterscheidlich behandeln kann.
Hat da jemand eine Idee? Danek schonmal
Greetz
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 328706
Url: https://administrator.de/contentid/328706
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
8 Kommentare
Neuester Kommentar
mv Preis__* /ordner
find ./ -type f -regex '.*/Preis_[^_]+_.*' -exec mv "{}" /ordner2 \;
mindestens ein Zeichen (Regex) des vorherigen Ausdrucks.
p.s. es geht übrigens auch noch einfacher, sorry:
mv Preis__* /ordner
mv Preis_[!_]* /ordner2
Zitat von @rababar2014:
@ nachfrage: mit welchem Suchbegriff bzw. unter welcher Kommandoreferenz hätte ich diese Syntax finden können? Ich habe etliche ubuntu bash referenzen und faqs durchgewälzt.
Der String [!_] ist mir z.B. noch nirgendwo begegnet...
@ nachfrage: mit welchem Suchbegriff bzw. unter welcher Kommandoreferenz hätte ich diese Syntax finden können? Ich habe etliche ubuntu bash referenzen und faqs durchgewälzt.
Der String [!_] ist mir z.B. noch nirgendwo begegnet...
Zitat von @132272:
(Regex)
(Regex)
Zitat von @rababar2014:
@ nachfrage: mit welchem Suchbegriff bzw. unter welcher Kommandoreferenz hätte ich diese Syntax finden können? Ich habe etliche ubuntu bash referenzen und faqs durchgewälzt.
Der String [!_] ist mir z.B. noch nirgendwo begegnet...
Das entstammt der Form her der Regular Expression Syntax ist aber in Wirklichkeit kein Regex sondern gehört zu den sogenannten globbing patterns die die meisten grundlegenden Dateisystem-Befehle unter Linux unterstützen@ nachfrage: mit welchem Suchbegriff bzw. unter welcher Kommandoreferenz hätte ich diese Syntax finden können? Ich habe etliche ubuntu bash referenzen und faqs durchgewälzt.
Der String [!_] ist mir z.B. noch nirgendwo begegnet...
http://www.tldp.org/LDP/GNU-Linux-Tools-Summary/html/x11655.htm
und bedeutet in diesem Beispiel so viel wie "Erlaube an dieser Stelle alles was kein(!) Unterstrich ist."