我想使用创建许多目录mkdir
。每个目录名称将由前缀(字符串)和索引(整数)组成。假设我希望前缀为“s”,索引范围为 1 到 50。这意味着我想创建标题为:的目录
s1
, s2
, ... , s49
,s50
有没有办法使用自动执行此操作mkdir
?谢谢你的时间。
答案1
一
for i in {1..50}; do mkdir s"$i" done
二
mkdir s{1..50}
该选项适用于巴什,桀骜和克什93
三
mkdir $(printf "s%02i " $(seq 1 50))
答案2
您可以使用 shell 脚本来完成此操作。
Pure sh - 即使在 POSIX 之前的 bourne shell 上也可以工作:
n=1;
max=50;
while [ "$n" -le "$max" ]; do
mkdir "s$n"
n=`expr "$n" + 1`;
done
如果要创建大量目录,可以通过将脚本减少为单个调用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 "$@"
Zsh、ksh93 或 bash 使这变得更容易,但我应该指出这不是内置的mkdir
,并且可能无法在其他 shell 中工作。对于较大的情况,它还可能受到可传递给命令的参数数量或总大小的限制的影响。
mkdir s{1..50}
答案3
这里有很多复杂的答案,但 bash 使它变得非常简单。当然,纯 POSIX 解决方案是可行的,但是为什么不利用bash
您正在使用的 shell呢?您可以轻松地做到这一点大括号扩展:
% 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
答案4
只是为了不同,这里有一个使用递归的 POSIX sh 解决方案:
makedirs() {
[ "$1" -gt 0 ] || return
mkdir "s$1"
makedirs $(( $1 - 1 ))
}
$ makedirs 9
$ ls
s1 s2 s3 s4 s5 s6 s7 s8 s9