Dateien kopieren ohne Endung

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
desputin
Beiträge: 1277
Registriert: 24.04.2015 17:16:34

Dateien kopieren ohne Endung

Beitrag von desputin » 06.01.2021 01:33:22

Hallo Ihr, habe etwas vermutlich ganz simples vor, weiß aber nicht, wie es geht.
Und zwar habe ich einen Ordner mit ganz vielen html-Dateien. Ich möchte nun alle Dateien kopieren in die jeweils selben Unterordner, aber ohne html-Endung. Und das Rekursiv -also mit Unterordnern....

Beispiel für einen Ordner VORHER:
Dokument1.html
Dokument2.html
Dokument3.html

Beispiel für einen Ordner NACHHER:
Dokument1
Dokument1.html
Dokument2
Dokument2.html
Dokument3
Dokument3.html

Wie geht das?
Viele Grüße desputin
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |

Benutzeravatar
RootRat
Beiträge: 29
Registriert: 03.06.2016 06:37:12

Re: Dateien kopieren ohne Endung

Beitrag von RootRat » 06.01.2021 03:24:07

Falls ich dich richtig verstanden habe...

Code: Alles auswählen

for f in *.html ; cp $f ${f%.*}/${f%.*} ; done
und falls du noch die directories vorher anlegen musst, packste einfach noch mkdir mit rein

Code: Alles auswählen

for f in *.html ; do mkdir ${f%.*} ; cp $f ${f%.*}/${f%.*} ; done
RootRat

Benutzeravatar
desputin
Beiträge: 1277
Registriert: 24.04.2015 17:16:34

Re: Dateien kopieren ohne Endung

Beitrag von desputin » 06.01.2021 13:10:53

Hallo RootRat,
super, danke.

Hm, ich kriege das hier, wenn ich das versuche:

Code: Alles auswählen

for f in *.html ; cp $f ${f%.*}/${f%.*} ; done
bash: Syntaxfehler beim unerwarteten Wort `cp'
Ordner müssen eigentlich keine angelegt werden, weil es schon eine Ordnerstruktur gibt. In allen Ordnern der Ordnerstruktur liegen html-Dateien, die ich jeweils durch identische html-Dateien aber ohne Endung ergänzen möchte.
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |

JTH
Moderator
Beiträge: 3015
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Dateien kopieren ohne Endung

Beitrag von JTH » 06.01.2021 13:47:01

Es fehlt ein do vor dem cp:

Code: Alles auswählen

for f in *.html; do cp "$f" "${f%.*}/${f%.*}"; done
Damits auch funktioniert, falls du Dateien mit Leerzeichen im Namen hast, habe ich mal " ergänzt.
Manchmal bekannt als Just (another) Terminal Hacker.

Benutzeravatar
RootRat
Beiträge: 29
Registriert: 03.06.2016 06:37:12

Re: Dateien kopieren ohne Endung

Beitrag von RootRat » 06.01.2021 13:52:24

Nun, durch stumpfes copy-paste lernt man eben nicht so viel... 8)
Aber das weisst du ja selber, dass da noch ein "do" hingehoert.

Und wenn es schon eine Ordnerstruktur gibt, dann brauchst ja nur die im lopp
abklappern und dein cp da absetzen.

RootRat

Benutzeravatar
desputin
Beiträge: 1277
Registriert: 24.04.2015 17:16:34

Re: Dateien kopieren ohne Endung

Beitrag von desputin » 06.01.2021 23:25:08

Hallo Ihr,
der Befehl:

Code: Alles auswählen

for f in *.html; do cp "$f" "${f%.*}"; done
hat schon mal funktioniert. Habe noch den Verzeichnisnamen davor weggenommen.
Das mit dem Loop hab ich noch nicht verstanden. ich möchte den Befehl ja rekursiv anwenden. So wie er jetzt ist, macht er nur das jeweils aktuelle Verzeichnis...
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |

Benutzeravatar
RootRat
Beiträge: 29
Registriert: 03.06.2016 06:37:12

Re: Dateien kopieren ohne Endung

Beitrag von RootRat » 07.01.2021 00:08:47

Man konnte sich auch mit "find" was basteln...

gegeben:

Code: Alles auswählen

 $ tree
├── dir1
│   ├── file1.html
│   └── file2.html
└── dir2
    ├── dir3
    │   ├── file1.html
    │   └── file2.html
    ├── file1.html
    └── file2.html 
Als Denkanstoss vielleicht sowas:

Code: Alles auswählen

find . -type f | while read f; do cp $f ${f%.*}; done 
result:

Code: Alles auswählen

 $ tree
├── dir1
│   ├── file1
│   ├── file1.html
│   ├── file2
│   └── file2.html
└── dir2
    ├── dir3
    │   ├── file1
    │   ├── file1.html
    │   ├── file2
    │   └── file2.html
    ├── file1
    ├── file1.html
    ├── file2
    └── file2.html 
RootRat

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: Dateien kopieren ohne Endung

Beitrag von tobo » 07.01.2021 00:54:25

desputin hat geschrieben: ↑ zum Beitrag ↑
06.01.2021 23:25:08
Das mit dem Loop hab ich noch nicht verstanden. ich möchte den Befehl ja rekursiv anwenden. So wie er jetzt ist, macht er nur das jeweils aktuelle Verzeichnis...
Die Bash könnte das Rekursive auch direkt:

Code: Alles auswählen

shopt -s globstar
for f in **/*.html; do cp "$f" "${f%.*}"; done
Oder mittels find:

Code: Alles auswählen

find . -type f -name '*.html' -execdir sh -c 'cp "${1}" "${1%.*}"' _ {} \;

Benutzeravatar
desputin
Beiträge: 1277
Registriert: 24.04.2015 17:16:34

Re: Dateien kopieren ohne Endung

Beitrag von desputin » 10.01.2021 17:40:16

Hallo Ihr,

also für mich war jetzt diese Lösung am einfachsten. Die anderen gehen bestimmt auch, aber ich hab das hier genommen:

Code: Alles auswählen

find . -type f -name '*.html' -execdir sh -c 'cp "${1}" "${1%.*}"' _ {} \;
Viele Grüße und danke noch mal an Euch alle
desputin
https://www.daswirdmanjawohlnochsagenduerfen.de
https://www.neoliberalyse.de - Über die Ökonomisierung aller Lebensbereiche. |

Antworten