Shell -> auslesen der Dateinamen und übergeben

Ali33

Newbie
Registriert
Jan. 2020
Beiträge
3
Hallo zusammen,

ich probiere gerade eine große Datenbank von cpanel wieder herzustellen, leider ist die DB so groß und die alten Backups so schlecht das diese nicht einfach zusammen gefügt werden können, da in jedem File das USE/GREAT Database fehlt.

Alle SQL Files haben folgendes Schema : back_wp1.sql oder back_wpa1.sql bis back_wp900.sql hoch gehend. (ca 900 Wordpress Datenbanken)

Da weder das USE noch das GREAT vorhanden ist, würde ich gerne das Verzeichnis auslesen (dort wo die Backups liegen) und einzeln in die Datenbank einlesen z.b den Namen back_wp900.sql ohne das .sql übergeben, da der Name back_wp900 eine Datenbank ist.

Jemand eine Idee wie man das einfach mit einem Script umsetzen könnte?

Danke Ali
 
Code:
$ ls
back_wp1.sql  back_wp900.sql  back_wpa1.sql

$ for db_file in *.sql; do echo $(basename $db_file .sql); done
back_wp1
back_wp900
back_wpa1

"echo" natürlich durch dein import kommando ersetzen.
 
geht auch wesentlich einfacher

ls -1 /Folder

ggf. noch etwas würzen mit:

ls -1 /Folder | grep *.sql

oder im Folder
ls -1 *.sql
 
Hallo 0x8100,

vielen Dank für deine schnelle Rückmeldung. Habe das mal so Eingestezt in eine Datei

Code:
#!/bin/sh
$ls
$ for db_file in *.sql; do echo $(basename $db_file .sql); done

sh -n test.sh
test.sh: line 3: syntax error near unexpected token `do'
test.sh: line 3: `$ for db_file in *.sql; do echo $(basename $db_file .sql); done'

Ich habe doch 1000% ein Anwendungsfehler gemacht :(
 
0x8100 schrieb:
das hilft aber nicht wenn der te den dateinamen ohne endung in einem weiteren kommando verwenden will.


das kann nicht funktionieren :)


jo, Anforderungen lesen war in dem Moment wohl nicht meine Stärke ...

In dem Fall wäre es eher ein

ls -1 | sed -e 's/\..*$//'
 
das "$" symbolisiert den prompt einer shell und gehört nicht ins script:

Code:
#!/bin/bash

for db_file in *.sql
do
  echo $(basename $db_file .sql)
done
 
  • Gefällt mir
Reaktionen: Ali33
ich habe das jetzt mal so Umgesetzt,

Code:
#!/bin/bash

for db_file in *.sql
do
mysql --defaults-file=/user/.my.cnf $(basename $db_file .sql) < $db_file
done

Danke nochmal !
 
Zurück
Oben