Dateinamen ohne Erweiterungen im Terminal auflisten?

Dateinamen ohne Erweiterungen im Terminal auflisten?

Ich verwende einen Mac. Ich muss eine Liste von Dateien in einem Ordner abrufen, ohne dass deren Erweiterungen in der Liste enthalten sind. Dies liegt daran, dass ich eine Liste von Produkten für den Import einer Website benötige und die Bildnamen praktischerweise dieselben sind wie die Produktnamen. Meine Liste darf jedoch NICHT die Erweiterungen enthalten.

Ich habe über das Terminal eine Liste mit Dateinamen erhalten und konnte diese in eine Textdatei kopieren. Das einzige Problem ist, dass die Dateinamen die Erweiterung „.jpg“ enthalten. Anhand der Liste, die ich vom Terminal habe, muss ich nun meine Textdatei durchgehen und die Erweiterung aus jedem Dateinamen (es gibt über tausend) manuell löschen, und das wird lange dauern. Gibt es einen einfacheren Weg? Kann ich das Terminal dazu bringen, eine Liste mit Dateinamen ohne ihre Erweiterungen anzuzeigen, sodass ich sie kopieren und in eine Liste einfügen kann? Oder kann ich die Erweiterungen aus diesen Dateien entfernen, sie dann im Terminal auflisten und ihre Namen kopieren? Gibt es einen anderen Weg? Ich bin verwirrt. Ich bin kein Programmierer, sondern nur ein Website-Designer.

Hoffe, dass jemand dabei helfen kann. Vielen Dank an alle!

Antwort1

Ausgeliehen vonPaketüberfluss:

ls -1 | sed -e 's/\..*$//'

Ich habe versucht, es als Duplikat zu markieren, aber es hat nicht funktioniert.

Eine meiner eigenen Lösungen, vorausgesetzt, wir kennen die Dateierweiterung(en).

find -type f -exec basename -s '.jpg' "{}" \;

Suchen Sie also nach allen Dateien, nicht nach Verzeichnissen, - type fund führen Sie die Prozedur dann basenamefür jede aus. -sSie können ein bekanntes Suffix angeben, das entfernt werden soll.

Eine andere alternative Lösung:von SU

Antwort2

Wenn sich Ihre Dateiliste in der Datei „in.txt“ befindet, führen Sie dieses Skript aus, um die Liste der Dateien ohne die Erweiterung in „out.txt“ zu erhalten:

#!/bin/bash    
while read fullfile; do
    filename=$(basename "$fullfile")
    filename="${filename%.*}"
    echo $filename >> out.txt
done <in.txt

Antwort3

Verwenden Sie vi(oder )? Wenn ja, dann ist es am einfachsten, die Datei mit / zu bearbeiten und einzugeben vim, da Sie die JPEG-Dateinamen bereits in einer Textdatei habenvivim

:%s/\.jpg$//

Das bedeutet, dass in jeder Zeile der Datei .jpgnach am Zeilenende vorkommendem gesucht wird, dieses entfernt und durch nichts ersetzt wird. Wenn es einige Zeilen gibt, die nicht mit enden .jpg, ist das in Ordnung; sie werden ignoriert (übersprungen). Wenn Sie mehrere Produktnamen (Dateinamen) pro Zeile haben, wie in

        hammer.jpg              screwdriver.jpg         wrench.jpg

lassen Sie einfach das weg $und fügen Sie hinzu gund sagen Sie

:%s/\.jpg//g

das wird entfernenalleVorkommen von .jpg, auch wenn sie nicht am Ende einer Zeile stehen.

verwandte Informationen