使用 mkdir 创建多个目录

使用 mkdir 创建多个目录

我想使用创建许多目录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

相关内容