我需要通过命令行使用mkdir
和来创建 5 个目录(name1、name2、name3、name4、name5) seq
。
如果我使用:
mkdir name{`seq -s , 1 5`}
其结果是一个目录:name{1,2,3,4,5}
我应该使用什么命令?
答案1
seq 1 42 | mkdir name{1..5}
或者,如果您不需要生命、宇宙和一切的答案,请放弃seq
并让 bash 的大括号扩展本身来完成工作:
mkdir name{1..5}
但是,如果您确实需要使用,seq
因为这是家庭作业:
mkdir $(seq -f "name%d" 5)
答案2
如果出于某种原因你不只是想要使用大括号扩展(另见下文),您可能会考虑:
seq 5 | xargs -I N mkdir nameN
这就创建了name1
、name2
、name3
、name4
和name5
。即使您的 shell 不支持大括号扩展(但bash
支持),它也可以工作。该xargs
命令构建并运行命令。该特定xargs
命令运行类似 的命令mkdir nameN
,但N
替换为输入的每个单词(从 管道输入seq
)。运行man xargs
或读取这一页有关该-I
选项的更多信息。
如果这是一个家庭作业,也许您不被允许使用第三个命令(xargs
)。但在“现实生活”中,你不太可能受到这样的限制。此外,如果您这样做是为了学习目的,那么这是一个学习命令的机会xargs
(如果您还不知道),这在各种情况下都很有用。
您还可以使用 shell 循环,如亚历克斯·P建议( for d in $(seq 5); do mkdir name$d; done
)。那for
环形使用$(
)
语法来执行命令替换1 2 3 4 5
为了从获取列表seq
,然后使用参数扩展($d
)构成每个mkdir
命令中的目录名。
您应该知道,所有这些方法都依赖于目录名称中不包含空格,尽管可以修改它们以使其不包含空格。
但你正在使用bash
,就像许多贝壳,它支持大括号扩展。现在,也许您需要您的脚本便携的对于不支持的 shell(例如dash
)。如果这就是您所需要的,那么您根本不应该使用大括号扩展。否则,你应该跟随杰夫·夏勒的推荐简单地写mkdir name{1..5}
。