mkdir 与 seq 命令问题

mkdir 与 seq 命令问题

我需要通过命令行使用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

这就创建了name1name2name3name4name5。即使您的 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}

相关内容