2016-10-26 4 views
1

Ich hatte ein Problem mit einem Backup auf einem Linux-Server, der irgendwie alle Ordner von Dateien eine Ebene nach unten in einen neuen Ordner mit dem gleichen Namen verschoben. Ich möchte alle Dateien an ihren ursprünglichen Speicherort zurückgeben. Viele der Dateien haben Leerzeichen in ihren Namen, um die Dinge zu komplizieren.Verschieben Sie alle Dateien auf einer Ebene um eine Ebene

Original-Verzeichnisstruktur:

backup/folder 1/file 1 
backup/folder 1/file 2 
backup/folder 1/subfolder/file A 
backup/folder 2/file 1 
... 

Falsche Verzeichnisstruktur:

backup/folder 1/folder 1/file 1 
backup/folder 1/folder 1/file 2 
backup/folder 1/folder 1/subfolder/file A 
backup/folder 2/folder 2/file 1 
... 

Bitte beachte, dass ich in dem Ordner 1 die Datei nicht in dem Unterordner verschieben möge, aber ich will den Unterordner selbst um eine Ebene nach oben zu gehen.

Ich habe ein paar ähnliche Befehle ausprobiert, basierend auf etwas verwandten Themen hier, aber habe es nicht zum Laufen gebracht, es versucht stattdessen, die Dateien in das aktuelle Verzeichnis zu verschieben. Was mache ich falsch?

finden. -mindepth 3 -maxdepth 3 -exec sh -c 'mv -v {} ..' \;

+0

Sind die beiden ersten Zeilen beide korrekt? Zeile 1 hat nur ein Duplikat, Zeile 2 jedoch zwei. – hidefromkgb

+0

Entschuldigung, ja, als ich meine Post bearbeitet habe, habe ich das vermasselt, jetzt ist es korrekt. Alle Dateien und Unterordner wurden um eine Ebene nach unten verschoben. – rabidfurball

Antwort

0

Sie können diese Linien anpassen:

for file in * 
do 
    if [ -d "$file" ]; then 
    cd "$file" 
    if [ -d "$file" ]; then 
     cd "$file" 
     mv * .. 
     cd .. 
     #rm -r "$file" 
    fi 
    cd .. 
    fi 
done 

Die Idee ist einfach auf höchstem Niveau, zu erkennen, ob ein Verzeichnis und wenn ein Unterverzeichnis mit dem gleichen Namen haben und dann alle Dateien in dem übergeordneten Verzeichnis verschieben .

+0

Fortschritte, aber dies scheint nach der ersten Datei in einem Test > test2/test2/test.txt > test3/test3/test.txt stehen geblieben sein ---- ---- wird > test2/Test .txt > test2/test2 > test3/test3/test.txt > test3/test3 – rabidfurball

+0

hinzufügen echo "$ file" nach dem _do_, um zu sehen, welche Datei –

+0

Es Mangel aufgeführt wird "cd ..", ich entschuldige mich, ich behebe den Code. –

Verwandte Themen