Erstellen Sie mit Bash mehrere Dateien mithilfe einer Datei, die die Dateinamen enthält

Erstellen Sie mit Bash mehrere Dateien mithilfe einer Datei, die die Dateinamen enthält

Ich versuche, verschiedene Dateien in einem einzigen Verzeichnis zu erstellen, indem ich eine Datei verwende, die die Dateinamen enthält. Wenn die Datei beispielsweise Folgendes enthält:

file1,file2

Es werden zwei Dateien file1.md und file2.md im Verzeichnis erstellt.

Ich verwende den Befehl touch {$(cat file)}.md, aber dadurch wird eine einzelne Datei file1,file2.md erstellt.

Antwort1

Sie können die Kommas durch Zeilenumbrüche ersetzen trund das Ergebnis in ein Array einlesen:

mapfile -t fnames < <(tr ',' '\n' < file)
touch "${fnames[@]/%/.md}"

Die Parametererweiterung ${fnames[@]/%/.md}ersetzt das Ende jedes Array-Elements ( %) durch das Suffix .md.

Antwort2

Wandeln Sie einfach das Komma in einen Zeilenumbruch um und lesen Sie dann die Dateinamen ein:

sed 's/,/\n/g' file | while read fileName; do touch "$fileName".md; done

Oder:

tr , '\n' < file | while read fileName; do touch "$fileName".md; done

Antwort3

Sie können Folgendes versuchen:

tr ',' '\n' < file | xargs -0 -I {} touch {}.md

verwandte Informationen