Ich habe diese Ordnerstruktur:
├── foo1
│ ├── bar1.txt
│ └── bar2.txt
├── foo2
│ ├── bar3.txt
│ └── bar4 with a space.txt
└── foo3
└── qux1
├── bar5.txt
└── bar6.txt
dass ich darauf eingehen möchte, mit einem Unterstrich zwischen den einzelnen Ordnerebenen:
├── foo1_bar1.txt
├── foo1_bar2.txt
├── foo2_bar3.txt
├── foo2_bar4 with a space.txt
├── foo3_qux1.bar6.txt
└── foo3_qux1_bar5.txt
Ich habe mich umgesehen und keine Lösung gefunden, die funktioniert. Meistens denke ich, weil mein Problem zwei Besonderheiten aufweist: Es gibt möglicherweise mehr als eine Ordnerebene im Stammverzeichnis und auch, weil einige Dateien möglicherweise Leerzeichen enthalten.
Irgendeine Idee, wie man dies in Bash erreicht? Vielen Dank!
Edit : Running Gleen Jackman vorgeschlagene Antwort Ich bekomme diese:
Es gibt zwei Unterstriche für den Ordner der ersten Ebene. Irgendeine Idee, wie man dies entweder vermeidet oder einfach umbenennt, so dass dies nur ein Unterstrich ist? Vielen Dank.
quelle
foo1__qux1_bar5.txt
zwei Unterstriche in der ersten Ordnerebene. Ich habe versucht, mit deiner Bash-Linie herumzuspielen, aber nichts schien zu funktionieren. Vielleicht muss ich etwas hinzufügen?"${file//\//_}"
zu"${file//+(/)/_
, und wenn dies ein Skript ist,shopt -s extglob
brew install findutils
und dann mitgfind
anstelle von installiert werdenfind
. Das hat bei mir funktioniert.Verwenden der Umbenennung von Perl:
AUSGABE
HINWEIS
(?<!\.)
, um den ersten nicht zu berühren./
Ich behalte die leeren Verzeichnisse, fühle mich frei zu:
find . -depth -type d -exec rm {} \;
Es gibt andere Tools mit demselben Namen, die dies möglicherweise können oder nicht. Seien Sie also vorsichtig.
Wenn Sie den folgenden Befehl ausführen (
GNU
)und du hast ein Ergebnis wie
und enthält nicht:
dann scheint dies das richtige Werkzeug zu sein =)
Wenn nicht, um es zum Standard (normalerweise bereits der Fall) zu machen
Debian
und abzuleiten wieUbuntu
:(Ersetzen Sie
/path/to/rename
den Pfad Ihresperl's rename
Befehls.Wenn Sie diesen Befehl nicht haben, durchsuchen Sie Ihren Paketmanager, um ihn zu installieren, oder führen Sie ihn manuell aus
Last but not least wurde dieses Tool ursprünglich von Larry Wall, dem Vater des Perl, geschrieben.
quelle
-type d -exec rmdir
...?perl-rename
in Arch Linux undprename
in Debian-basierten Systemen verfügbar.rename
Erklärungen hinzugefügtmit
pax
...Dadurch wird im aktuellen Verzeichnis ein Hardlink zu allen Dateien in den untergeordneten Verzeichnissen erstellt, durch die ein
_
Ersatz ersetzt wird/
. Sie können dann die Ergebnisse überprüfen und alle untergeordneten Verzeichnisse mit ...... sobald Sie überprüft haben, dass die Ergebnisse Ihren Wünschen entsprechen.
quelle
Sie können es mit dem folgenden Befehl versuchen.
Der obige Befehl verschiebt die Dateien und das Verzeichnis bleibt erhalten, das später entfernt werden kann.
quelle