![如何使用 .txt 文件中的行创建文件?](https://linux22.com/image/74182/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20.txt%20%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E8%A1%8C%E5%88%9B%E5%BB%BA%E6%96%87%E4%BB%B6%EF%BC%9F.png)
例如,我有一个名为 fileNames.txt 的文件。 cat >fileNames
回报
abet
able
abacus
如何使用文件名将 abet、able 和 abacus 创建为 .txt 文件?我尝试使用带有 cat 和 touch 的管道。
答案1
有很多方法可以做到这一点,包括以下几种(假设是 GNU xargs
):
sed -e '/^[[:space:]]*$/d' -e 's/$/.txt/' fileNames.txt | xargs -rd '\n' touch --
假设 fileNames.txt 中的每一行只有一个文件名。该sed
脚本删除空行(感谢@rubynorails),并在将它们通过管道传输到 .txt 之前将“.txt”添加到每个文件名的末尾xargs touch
。
通过使用-d '\n'
带有 xargs 的选项(一个 GNU 扩展,它告诉xargs
仅使用换行符或 '\n' 作为分隔符而不是任何空格,并禁用引号处理),这甚至可以处理包含空格和其他潜在问题字符的文件名(或换行符本身除外\n
)。例如,如果一行包含“abetable”,而没有,则会创建-d '\n'
两个文件(abet
和)。able.txt
使用它,abet able.txt
只会创建一个文件。
答案2
您可以使用 read 命令在 while 循环中使用输入重定向
while read line; do
touch "${line}.txt"
done < fileNames.txt
答案3
awk 'NF>0' fileNames.txt | while read line; do touch "${line}.txt"; done
该awk
命令只是删除空行。
据我所知,这些行也是字面意思,因此行上的任何内容都会被写入文件名。