试图弄清楚如何逐行遍历$(document).ready(function () {
$("#<%=itemOne.ClientID%>").keyup(function () {
if ($(this).val().length > 2) {
$("#<%=addItem.ClientID%>").removeAttr('disabled');
}
else {
$("#<%=addItem.ClientID%>").attr('disabled', 'disabled');
}
}).trigger('keyup');
});
文件(filemappings.txt),然后使用.txt
(tab
)作为分隔符拆分每一行,以便我们可以创建选项卡右侧指定的目录(\t
)。
读取filemappings.txt,然后按mkdir -p
tab
会变成
server/ /client/app/
server/a/ /client/app/a/
server/b/ /client/app/b/
mkdir -p /client/app/
mkdir -p /client/app/a/
mkdir -p /client/app/b/
会是一个不错的选择吗?为什么或为什么不呢?
答案 0 :(得分:4)
cut -f 2 filemappings.txt | tr '\n' '\0' | xargs -0 mkdir -p
xargs -0非常适合矢量操作。
答案 1 :(得分:3)
您已经有答案告诉您如何使用xargs
。根据我的经验,xargs
在您想要在易于检索的参数列表上运行简单命令时非常有用。在您的示例中,xargs
会做得很好。但是,如果您想执行比运行简单命令更复杂的操作,则可能需要使用while
循环:
while IFS=$'\t' read -r a b
do
mkdir -p "$b"
done <filemappings.txt
在这种特殊情况下,read a b
将读取由定义的IFS
分隔的两个参数,并将每个参数放在一个不同的变量中。如果你是一个单行爱好者,你也可以这样做:
while IFS=$'\t' read -r a b; do mkdir -p "$b"; done <filemappings.txt
通过这种方式,您可以读取多个参数以应用于任何系列的命令; xargs
不适合做的事情。
使用read -r
将逐字地读取一行,而不管其中是否有任何反斜杠,以防您需要读取带有反斜杠的行。
另请注意,某些操作系统可能允许选项卡作为文件或目录名称的一部分。这将打破使用选项卡作为参数的分隔符。
答案 2 :(得分:1)
sed -n '/\t/{s:^.*\t\t*:mkdir -p ":;s:$:":;p}' filemappings.txt | bash
sed -n
:仅适用于包含tab
(分隔符)s:^.*\t\t*:mkdir -p :
:将所有内容从行预设更改为tab
至mkdir -p
| bash
:告诉bash
创建文件夹答案 3 :(得分:1)
正如其他人所指出的那样,\t
字符也可以是文件或目录名的一部分,以下命令可能会失败。假设问题代表输入文件的真实形式,可以使用:
$ grep -o -P '(?<=\t).*' filemappings.txt | xargs -d'\n' mkdir -p
它使用-P
perl样式的正则表达式来获取\t
(TAB)字符后面的单词,然后使用-d'\n'
将mkdir -p
作为{{1}的单个输入提供}。
答案 4 :(得分:0)
使用GNU Parallel,它看起来像这样:
parallel --colsep '\t' mkdir -p {2} < filemapping.txt