Dateien nach Ordner umbennenen
Dateien nach Ordner umbennenen
Hallo zusammen,
Ich habe einen Ordner mit der Struktur.
20231012/blabla.txt
20231013/blabla.txt
...
Ich möchte nun den Ordnername auf den Dateinamen übertragen und in den Hauptordner verschieben, also so:
aus 20231012/blabla.txt wird 20231012.txt
aus 20231013/blabla.txt wird 20231013.txt
Wie mach ich das am ungeschicksten?
Ich habe einen Ordner mit der Struktur.
20231012/blabla.txt
20231013/blabla.txt
...
Ich möchte nun den Ordnername auf den Dateinamen übertragen und in den Hauptordner verschieben, also so:
aus 20231012/blabla.txt wird 20231012.txt
aus 20231013/blabla.txt wird 20231013.txt
Wie mach ich das am ungeschicksten?
Re: Dateien nach Ordner umbennenen
Vielleicht so:
Dateien umbenennen, dann Verzeichnisse löschen. Funtioniert nur richtig bei einer Datei pro Verzeichnis.
EDIT: Rename-Substitution gehärtet.
Code: Alles auswählen
cd <DIR>
find -type f -exec rename -n 's/\/[^\/]+(\.[^\/.]+)$/$1/' {} +
find -type d -delete
EDIT: Rename-Substitution gehärtet.
Zuletzt geändert von tobo am 27.10.2023 20:49:39, insgesamt 1-mal geändert.
Re: Dateien nach Ordner umbennenen
Funktioniert mit dem Synology find leider nicht. Gibt es eine Alternative?
Re: Dateien nach Ordner umbennenen
Ja ok, ist das Paket rename installiert?
Re: Dateien nach Ordner umbennenen
Habe ich extra nachinstalliert, aber es gibt keine weitere Ausgabe ausser einem neuen Prompt.
Re: Dateien nach Ordner umbennenen
Das ist auch nicht geplant, dass da irgendeine Ausgabe stattfinden soll - wenn die Zeilen mit angepassten <DIR> nacheinander ausgeführt werden, dann ist das kommentarlos erledigt.
Re: Dateien nach Ordner umbennenen
Da passiert nichts, sonst hätte ich das nicht geschrieben.
Code: Alles auswählen
administrator@NAS10:~/schnitzel$ mkdir wurst999
administrator@NAS10:~/schnitzel$ touch wurst999/schnitzel.txt
administrator@NAS10:~/schnitzel$ mkdir wurst900
administrator@NAS10:~/schnitzel$ touch wurst900/schnitzel.txt
administrator@NAS10:~/schnitzel$ find -type f -exec rename 's/\/[^\/.]+\././' {} +
administrator@NAS10:~/schnitzel$ find -type d -delete
find: cannot delete ‘./wurst999’: Directory not empty
find: cannot delete ‘./wurst900’: Directory not empty
administrator@NAS10:~/schnitzel$ ls -laR
.:
total 0
drwx------ 1 administrator users 32 Oct 27 18:46 .
drwxr-xr-x 1 administrator users 206 Oct 27 18:46 ..
drwx------ 1 administrator users 26 Oct 27 18:46 wurst900
drwx------ 1 administrator users 26 Oct 27 18:46 wurst999
./wurst900:
total 0
drwx------ 1 administrator users 26 Oct 27 18:46 .
drwx------ 1 administrator users 32 Oct 27 18:46 ..
-rw------- 1 administrator users 0 Oct 27 18:46 schnitzel.txt
./wurst999:
total 0
drwx------ 1 administrator users 26 Oct 27 18:46 .
drwx------ 1 administrator users 32 Oct 27 18:46 ..
-rw------- 1 administrator users 0 Oct 27 18:46 schnitzel.txt
Re: Dateien nach Ordner umbennenen
Tja, rename funktioniert offensichtlich nicht - die Datei wird nicht umbenannt. Wie sind denn die Ausgaben von:
Code: Alles auswählen
apt list rename
update-alternatives --config rename
Re: Dateien nach Ordner umbennenen
Code: Alles auswählen
apt list rename
-sh: apt: command not found
update-alternatives --config rename
-sh: update-alternatives: command not found
rename --version
rename from util-linux 2.39
opkg list rename
rename - 2.39-2
find -version
find (GNU findutils) 4.9.0
Re: Dateien nach Ordner umbennenen
Nein, wie du aus den Ausgaben ersehen kannst, liegt es an rename. (EDIT: Das zu installierende rename heißt vielleicht file-rename oder rename.pl)
Du musst auf diesem Etwas, das du da betreibst, es schaffen, die Perl-Version von rename zu installieren (EDIT: und diese dann womöglich mit voller Pfadangabe im find angeben). Dann wird das auch funktionieren. Viel Glück...
EDIT: Ergänzungen (hier) und find (in 1. Antwort) angepassst.
Du musst auf diesem Etwas, das du da betreibst, es schaffen, die Perl-Version von rename zu installieren (EDIT: und diese dann womöglich mit voller Pfadangabe im find angeben). Dann wird das auch funktionieren. Viel Glück...
EDIT: Ergänzungen (hier) und find (in 1. Antwort) angepassst.
Re: Dateien nach Ordner umbennenen
Das lässt sich doch auch ziemlich leicht mit einer Schleife in der Shell lösen:
Auszuführen in dem Ordner, der die Struktur aus dem Eingangsbeitrag enthält. Der Ursprungsname (exkl. der Dateiendung) der zu verschiebenden Dateien ist egal.
Funktioniert ebenfalls am sinnvollsten, wenn es nur eine zu verschiebende Datei pro Ordner gibt. Falls die zu verschiebenden Dateien eine andere Endung als .txt haben, müsste man das an den vier Stellen oben ersetzen.
Code: Alles auswählen
for f in */*.txt; do mv -n -- "$f" "${f%/*.txt}.txt"; rmdir -- "${f%/*.txt}"; done
Funktioniert ebenfalls am sinnvollsten, wenn es nur eine zu verschiebende Datei pro Ordner gibt. Falls die zu verschiebenden Dateien eine andere Endung als .txt haben, müsste man das an den vier Stellen oben ersetzen.
Manchmal bekannt als Just (another) Terminal Hacker.
Re: Dateien nach Ordner umbennenen
Wieso mountest du die Synology nicht und führst das Skript von deinem Debian Rechner aus aus?
Re: Dateien nach Ordner umbennenen
Das Ding steht im Rechenzentrum, da gehe ich nur mit ssh drauf.DaCoda hat geschrieben:29.10.2023 22:13:05Wieso mountest du die Synology nicht und führst das Skript von deinem Debian Rechner aus aus?
Re: Dateien nach Ordner umbennenen
Die for-Schleife funktioniert, danke.JTH hat geschrieben:28.10.2023 00:10:03Das lässt sich doch auch ziemlich leicht mit einer Schleife in der Shell lösen:Code: Alles auswählen
for f in */*.txt; do mv -n -- "$f" "${f%/*.txt}.txt"; rmdir -- "${f%/*.txt}"; done
Re: Dateien nach Ordner umbennenen
Dann mounte das Ding mit sshfs und führe das Skript von deinem Debian Rechner aus.
Re: Dateien nach Ordner umbennenen
Dann ergänz gerne noch ein „[gelöst]“ in der Titelzeile des ersten Beitrags
Manchmal bekannt als Just (another) Terminal Hacker.