我如何告诉 mkdir 尝试创建 dir1,如果它已经存在,则创建 dir2 等,直到它遇到一个不存在的名称?

01A*_*key 13 bash command-line mkdir

我想创建一个以数字结尾的目录,例如“dir1”,如果目录已经存在,则增加该数字,直到遇到不存在的目录名称,我需要在一行中执行此操作一个 Linux 命令行,类似于:

mkdir --increment dir$
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

到目前为止,我有这个:

dir=output; n=0; mkdir -p $dir$n; if test -d $dir$n; then n=$((n+1)); echo $dir$n; fi
Run Code Online (Sandbox Code Playgroud)

但它只是回显下一个目录名称,我需要它来递归执行命令。

Jde*_*eBP 26

这是使用 的一个微不足道的练习while

n=0
尽管 !mkdir 目录$n
做
    n=$((n+1))
完毕

但是,当然不用多想就会意识到这种微不足道的机制不能很好地扩展。

因此,与其重新发明轮子并不得不再次剃掉所有角落,不如从模板中创建独特的临时目录略有不同:

名称=$(mktemp -d dirXXXXXXXXXXX)


IQA*_*eas 6

如果您只想逐步创建以正确顺序列出的目录,我可以推荐基于当前日期命名的文件夹吗?

DATE=$(date +%F)
mkdir "dir-$DATE"
Run Code Online (Sandbox Code Playgroud)

它将创建名称类似dir-2014-03-02( 的目录YYYY-MM-DD,以便按字母顺序出现)。

如果每天创建多个目录,则可以将当前时间添加到文件名中。查看man date如何调整date.


gle*_*man 6

首先找到“最大”目录名,获取数字并递增:

last_dir=(printf "%s\n" dir* | sort -Vr | head -1)
num=$(last_dir#dir)
mkdir "dir$((num+1))"
Run Code Online (Sandbox Code Playgroud)