
Beim Stöbern in den erweiterten Einstellungen von Dropbox habe ich einen Ordner verloren. Das habe ich erst etwa einen Monat später entdeckt. Ich habe es geschafft, diesen Ordner von Dropbox zurückzubekommen, allerdings hat sich die Dateistruktur der Unterordner dramatisch verändert. Der aktuelle Ordner enthält jetzt zwei Versionen jedes ursprünglichen Unterordners. Derzeit sieht er so aus:
folder
/folder1
/folder11
/folder111
/Folder111
/file1111
/file1112
/file1113
/Folder11
/file111
/file112
/folder12
/Folder12
/folder2
/folder3
Ich habe also Unterordner in Kleinbuchstaben und Unterordner in BumpyCase. Die Unterordner in Kleinbuchstaben enthalten Unterunterordner und die Unterordner in BumpyCase enthalten Dateien. Die Unterunterordner enthalten wiederum eine Version ihrer jeweiligen Unterordner in Kleinbuchstaben und eine in BumpyCase. Und diese Geschichte geht noch mehrere Ebenen weiter.
Glücklicherweise gibt es keine Duplikate in Dateien, sondern nur in Ordnern (dieselben Buchstaben, aber unterschiedliche Groß- und Kleinschreibung). Auf jeder Ebene muss ich also Ordner zusammenführen, die sich nur in der Groß- und Kleinschreibung der Namen unterscheiden. Und um das richtig zu machen, muss ich auf der untersten Ebene beginnen und mich bis zum Ordner der obersten Ebene vorarbeiten.
Ich möchte, dass alles in die CamelCase-Verzeichnisse geht.
Die Partition, auf der sich die Daten befinden, ist eine Ext4-Partition. Ich habe Zugriff auf mehrere NTFS-Partitionen.
Gibt es einen praktischen Linux-Befehl/ein praktisches Linux-Tool oder jemanden mit einer Idee für ein Skript, mit dem dies erreicht werden könnte? Ich bin schon sehr froh, dass ich meine Sachen zurückbekommen habe, aber die aktuelle Struktur ist eine große Unannehmlichkeit.
Antwort1
Ich hatte das gleiche Problem und habe eine praktische Lösung gefunden.
Gehen Sie einfach zu Ihrem Dropbox-Konto, benennen Sie Ihre Stammordner mit Kleinbuchstaben um und laden Sie sie erneut herunter!
ich leseanderswodass Dropbox ein Problem mit Ordnern und fehlender Groß-/Kleinschreibung hat. Ich bin nicht sicher, ob die Großschreibung der Ordnernamen das einzige Problem war. Ich hatte neben Ordnern mit Großbuchstaben noch andere Probleme, die das Dateisystem von Dropbox beeinträchtigen könnten, z. B. das Teilen der Ordner von einem Mac aus und der Versuch, sie auf eine Ubuntu-Maschine herunterzuladen. Aber das Problem, das ich fand, war ähnlich dem hier berichteten. Alle Ordner wurden auf dem Webserver korrekt angezeigt, aber beim Herunterladen wurden alle Ordner, die mit einem Großbuchstaben begannen, dupliziert und einige Inhalte gingen in die Ordner mit Großbuchstaben und einige Inhalte in die Ordner mit Kleinbuchstaben, also suchte ich nach einer Möglichkeit, diese Ordner zusammenzuführen.
Antwort2
Alle Befehle beginnen im obersten Verzeichnis und setzen voraus, dass Sie keine Zeilenumbrüche in Dateinamen haben. Ich gehe von GNU-Tools (Linux oder Cygwin) aus. Achtung, dies ist alles ungetesteter Code, der direkt in den Browser eingegeben wurde.
Es ist ziemlich einfach, alle Verzeichnisse in Kleinbuchstaben zusammenzuführen. Ein Ansatz besteht darin, alle Verzeichnisse rekursiv zu durchsuchen und sie in ihre Kleinbuchstaben-Gegenstücke zusammenzuführen. Führen Sie zuerst die Durchlauftiefe durch, damit der Inhalt zweier Verzeichnisse bereits normalisiert ist, wenn Sie sie zusammenführen.
find . -depth -name '*[[:upper:]]*' -type d -execdir sh -c '
source=$0
target=$(echo "$source" | tr "[:upper:]" "[:lower:]")
if [ "$source" != "$target" ]; then # need to rename or merge
if [ -d "$target" ]; then
# merge $source (mixed- or uppercase) into $target (lowercase)
find "$source" -mindepth 1 -maxdepth 1 -exec mv -bt "$target" {} +
rmdir "$source"
else
mv "$source" "$target"
fi
fi
' {} \;
Wenn Sie Kleinbuchstaben in gemischte Groß- und Kleinschreibung umwandeln möchten, müssen Sie das Verzeichnis mit gemischter Groß- und Kleinschreibung bestimmen, das jedem Verzeichnis mit Kleinbuchstaben entspricht. Der folgende Codeausschnitt wählt ein beliebiges Verzeichnis mit gemischter Groß- und Kleinschreibung aus, wenn mehrere vorhanden sind.
find . -depth ! -name '*[[:upper:]]*' -type d -execdir sh -c '
source=$0
target=$(find . -maxdepth 1 -iname "$source" -not -name "$source" -print -quit)
if [ -n "$target" ]; then …
fi
' {} \;