2017-12-30 38 views
-1

umbenennen Ich bin ziemlich neu in der Linux.Bash - Dateien rekursiv von Database Value

Ich habe einen Ordner, der etwa 1000 Dateien enthält und diese Dateinamen unter Datenbank gespeichert.

Was ich tun möchte ist, alle rekursiv mit einem anderen Wert in der gleichen Datenbank umzubenennen.

Meine DB-Struktur

oldVal  | newVal 
oldFileName | newFileName 

Was ist der kürzeste und effizienteste Weg, dies zu tun?

Vielen Dank im Voraus für die Tipps.

+0

Es gibt einige Schritte in einem ähnlichen Beitrag erwähnt. https://stackoverflow.com/questions/8416990/shell-bash-shortcut-for-bulk-renaming-of-files-in-a-folder. Ich bevorzuge die for-Schleife, da sie mir mehr Kontrolle gibt und eingebaute bash verwendet (keine zusätzlichen Installationen/Tools) –

+1

Rekursiv? Enthält Ihre Datenbank die Dateinamen mit Pfad? – Cyrus

+0

Oder bedeutet * rekursiv *, dass die umbenannte Datei vielleicht wieder umbenannt wird, zB wenn die Datenbank die Einträge 'name1 | enthält name2' und 'name2 | name3', dass * name1 * sollte in * name3 * umbenannt werden? – user1934428

Antwort

1

Es ist möglich, die Datenbankinformationen in eine Textdatei zu exportieren? Wenn ja, und für eine MySQL-Datenbank, können Sie dies versuchen.

Zuerst führen Sie diese Abfrage in MySQL ...

SELECT field1,field2 
FROM table 
INTO OUTFILE '/your/path/with/files/to/rename/export.txt' 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'; 

nach, gehen Sie zu /Ihr/path/mit/files/bis// Ordner umbenennen und diese Paste ...

SAVEIFS=$IFS 
IFS=$(echo -en "\n\b") 
LIST=`cat /your/path/with/files/to/rename/export.txt` 
for i in $LIST ; 
do 
field1=`echo $i | cut -d',' -f1` 
field2=`echo $i | cut -d',' -f2` 
\mv "./"$field1 "./"$field2 
done 
IFS=$SAVEIFS 
Verwandte Themen