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 tr
und 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