我想使用mkdir
. 每个目录名称将由前缀(字符串)和索引(整数)组成。假设我希望前缀为“s”,索引范围为 1 到 50。这意味着我想创建标题为:
s1
, s2
, ... , s49
,s50
有没有办法使用自动执行此操作mkdir
?谢谢你的时间。
Jho*_*han 38
一
for i in {1..50}; do
mkdir s"$i"
done
Run Code Online (Sandbox Code Playgroud)二
mkdir s{1..50}
Run Code Online (Sandbox Code Playgroud)
此选项适用于bash、zsh和ksh93
三
mkdir $(printf "s%02i " $(seq 1 50))
Run Code Online (Sandbox Code Playgroud)Ran*_*832 33
您可以使用 shell 脚本执行此操作。
纯 sh - 这甚至适用于 POSIX 之前的 bourne shell:
n=1;
max=50;
while [ "$n" -le "$max" ]; do
mkdir "s$n"
n=`expr "$n" + 1`;
done
Run Code Online (Sandbox Code Playgroud)
如果您想创建大量目录,您可以通过将脚本减少到单个调用mkdir
以及使用 shell 内置函数进行测试和算术来加快脚本速度。像这样:
n=1
max=50
set -- # this sets $@ [the argv array] to an empty list.
while [ "$n" -le "$max" ]; do
set -- "$@" "s$n" # this adds s$n to the end of $@
n=$(( $n + 1 ));
done
mkdir "$@"
Run Code Online (Sandbox Code Playgroud)
Zsh、ksh93 或 bash 使这更容易,但我应该指出这不是内置的mkdir
,可能无法在其他 shell 中工作。对于较大的情况,它也可能受到可传递给命令的参数数量或总大小的限制的影响。
mkdir s{1..50}
Run Code Online (Sandbox Code Playgroud)
lae*_*ade 11
这里有很多复杂的答案,但 bash 让它变得非常简单。当然,纯 POSIX 解决方案有效,但为什么不利用bash
您正在使用的外壳呢?您可以通过大括号扩展轻松完成此操作:
% mkdir -v s{1..10} && ls -1d s{1..10} (09-24 17:37)
mkdir: created directory `s1'
mkdir: created directory `s2'
mkdir: created directory `s3'
mkdir: created directory `s4'
mkdir: created directory `s5'
mkdir: created directory `s6'
mkdir: created directory `s7'
mkdir: created directory `s8'
mkdir: created directory `s9'
mkdir: created directory `s10'
s1
s10
s2
s3
s4
s5
s6
s7
s8
s9
Run Code Online (Sandbox Code Playgroud)
mkdir $(seq --format 's%.0f' 1 50)
或者如果你想要零填充数字(这对排序会更好):
mkdir $(seq --format 's%02.0f' 1 50)
或者:
mkdir s$(seq -s ' s' -w 1 50)
-- 注意 's' 之前的字符串$()
,如果没有它,创建的第一个目录将只是 '01' 而不是 's01'
最后: mkdir $(printf "s%02i " $(seq 1 50))
seq
来自 GNU Coreutils
奇怪的是, seq--format
或-f
option 只允许 printf 的浮点双精度类型(如 f 和 g。也是一种奇怪的浮点十六进制格式,我从未发现有任何用处)。我不知道为什么。如果它还支持其他printf(3)
数字类型,如整数 (d,i)、八进制 (o,U) 或十六进制 (x,X) ,那就太好了。
无论如何,为此目的,具有 0 十进制精度的双精度格式(例如%.0f
或%02.0f
足够接近整数)。
$ seq --help 用法:seq [OPTION]... LAST 或:seq [OPTION]... FIRST LAST 或: seq [OPTION]... 第一个增量最后一个 以 INCREMENT 为单位,从 FIRST 到 LAST 打印数字。 -f, --format=FORMAT 使用 printf 风格的浮点格式 -s, --separator=STRING 使用 STRING 来分隔数字(默认:\n) -w, --equal-width 通过填充前导零来均衡宽度 --help 显示此帮助并退出 --version 输出版本信息并退出 如果省略 FIRST 或 INCREMENT,则默认为 1。即 即使 LAST 小于 FIRST,省略 INCREMENT 默认为 1。 FIRST、INCREMENT 和 LAST 被解释为浮点值。 如果 FIRST 小于 LAST,则 INCREMENT 通常为正,并且 如果 FIRST 大于 LAST,则 INCREMENT 通常为负。 FORMAT 必须适合打印一个“double”类型的参数; 如果 FIRST、INCREMENT 和 LAST 都是定点,则默认为 %.PRECf 具有最大精度 PREC 的十进制数,否则为 %g。
另见:http : //www.gnu.org/software/coreutils/manual/html_node/seq-invocation.html