我有一个文件 ,foo.txt
每行都有一个文件夹名称:
folder_1
folder_2
folder_3
我想做这样的事情:
cat foo.txt | xargs -I {} echo 'function {}() { return stuff; }' > {}/function.js
换句话说,我想逐行读取文件,然后使用每一行创建一个字符串并创建存储该字符串的文件的名称。
如何从 bash 的命令行执行类似的操作?
答案1
只需循环文件中的所有行:
while read line
do
echo "function $line() { return stuff; }" > "$line/function.js"
done < foo.txt
当然,这假设您已经在foo.txt
.如果不是这种情况,那么首先使用 创建它们mkdir "$line"
。
另一种方法,用awk
而不是循环是:
awk '{printf("%s\n","function "$0"() { return stuff; }")>$0"/function.js"}' foo.txt
答案2
xargs
您可以使用+来做到这一点sh -c
:
<file1.txt xargs -d'\n' -L1 sh -c 'mkdir -p -- "$0"
printf %s\\n "function $0() { return stuff; }" >"$0"/function.js'
-I {}
如果您的文本文件包含时髦的内容(例如像 之类的行- $'\n' \ $PATH
),则不使用该构造来避免扩展。