Ändern Sie * .txt in * .csv

8

Wie kann ich alle * .txt in einem Verzeichnis in * .csv-Dateien im Terminal (Mavericks) umbenennen? Ich habe versucht, im Verzeichnis zu folgen:

mv *.txt *.csv
Hans
quelle
Dies kann gut in AppleScript gemacht werden. Dann kann AppleScript mit dem Befehl Terminal aufgerufen werden osascript.
Nicolas Barbulesco

Antworten:

11

Sie müssen alle Dateien durchlaufen

for f in *.txt; do
    mv "$f" "${f%.txt}.csv"
done

Wenn Sie Dateien mit Namen haben, die ebenfalls mit a beginnen, .müssen Sie diese möglicherweise ausführen

for f in *.txt .*.txt; do
    [[ -f "$f" ]] && mv "$f" "${f%.txt}.csv"
done
nohillside
quelle
6
Sie können es in der Shell tun, ohne ein externes Programm mv "$f" "${f%.txt}.csv"
aufzurufen
1
Dies überspringt die Dateien beginnend mit.
Nicolas Barbulesco
1
@glennjackman Danke. Ich verstehe die Syntax immer falsch, wollte nicht posten, ohne ein Unix-System zum Testen zu haben.
Nohillside
@NicolasBarbulesco Stimmt, aber angesichts der besonderen Rolle, die .somethingDateien in der Shell spielen, würde ich nicht empfehlen, Dateinamen trotzdem mit einem Punkt zu beginnen. Wenn Sie wirklich müssen, können Sie for f in .*.txt; dostattdessen immer laufen .
Nohillside
2
Wenn Sie Punktdateien einschließen möchten shopt -s dotglobund die Dateierweiterung diese aufnimmt.
Glenn Jackman
1

Das funktioniert auch gut:

# change to the Zsh
zsh

# load the built-in zmv function
autoload -U zmv

# rename the files
zmv '(*).txt' '$1.csv'
Chauncey Garrett
quelle
Aber dies überspringt die Dateien beginnend mit.
Nicolas Barbulesco
0
ls *.txt |awk '{print "mv "$1" " substr($1,1,(index($1,".txt")))"csv"}' |sh

Befehlserklärung:

ls *.txt listet Dateien auf, die mit txt enden

| awk '{print "mv "$1" " substr($1,1,(index($1,".txt")))"csv"} Gibt den Befehl aus, mit dem die mit txt aufgelisteten vorherigen Dateien in csv umbenannt werden können

| sh führt den zuvor gedruckten Befehl aus und benennt so die Dateien effektiv um

Hinweis: Wenn Sie alle Dateien einschließlich versteckter Dateien (die mit beginnen .) auflisten möchten, verwenden Sie ls -a *.txtstattdessen

kiran
quelle
Möchten Sie es für nicht-technische Benutzer auseinander brechen (Stück für Stück erklären)?
Alex