Lollytrolly schrieb:
Oh, Mist, ich wollte nur sehen, wie der Code im Editor aussieht. Weil er nicht als Code formatiert wurde ist er schlecht zu lesen. Dann kam ich aus Versehen auf "Veröffentlichen".
Also korrigiere ich mal das Layout:
| #!/bin/bash
for i in `find -maxdepth 1 -type f -name '*' | sed 's/.*\.\(.*\)$/\1/' | sort -uf` ; do
echo "$i: `find -name \"*.$i\" | wc -l`"
done
|
Backticks sind übrigens veraltet, schlecht lesbar, nicht portabel und schwer zu schachteln. Besser wäre:
| #!/bin/bash
for i in $(find -maxdepth 1 -type f -name '*' | sed 's/.*\.\(.*\)$/\1/' | sort -uf)
do
echo "$i: $(find -name "*.$i" | wc -l)"
done
|
Zu meiner Frage:
Wenn ich eine Datei OHNE Dateiendung habe, wird mir ein Slash vor genau diese Datei gehängt.
Und wenn Du mehrere hast?
Ich möchte dennoch die Kategorie „no suffix“ zählen lassen.
Bsp: /dateiohneendung: 0
Wie kann ich sed so formulieren, dass es ein / am Anfang einer möglichen Datei (ohne Dateiendung, aber dafür mit diesem / am Anfang) löscht, WENN es ein solches Slash am Anfang des Dateinamens gibt?
Es gibt nur zwei Zeichen, die nicht Teil eines Dateinamens sein können, die binäre 0 und der Slash.
PS: Das Slash wurde von Linux selbst dort „plaziert“.
Von find. Gnu-find auf Solaris oder BSD würde das wohl genauso machen. Mit printf kannst Du das führende ./ unterdrücken – da Du ja eh maxdepth auf 1 setzt versteht sich das von selbst:
|
for i in $(find -maxdepth 1 -type f -name "*" -printf "%f\n" | sed 's/.*\.\(.*\)$/\1/' | sort -uf); do echo $i: $(find -name "*$i" | wc -l); done
class: 39
dot: 4
html: 4
klein: 1
log: 1
noextension: 1
scala: 23
spec: 1
txt: 29
|
noextension ist eine Datei ohne Erweiterung.