我想在我的主目录中创建名为“A”的目录,但我不知道这样的目录是否已经存在。我想编写一个命令来创建目录(如果目录不存在)。但是,如果该目录存在,该命令将创建一个同名的新目录,并添加一个小的内容来更改目录的名称。小的添加应该是随机的 - 也就是说,每次运行命令时,都会收到不同的添加。例如,该命令将创建目录“A15”或“A7”或任何此类附加目录,而不是“A”。可以假设添加的新目录不存在。如果原始目录“A”不存在但创建成功,或者消息“目录存在”,该命令将打印消息 !DONE。已创建一个新名称 A05,其中 A05 是新名称
答案1
我假设“没有bash
脚本”意味着使用一系列命令或方便的 shell 函数。我会给你一个方便的 shell 函数。
此函数尝试创建给定名称的目录,并将使用不同的数字后缀重试,直到创建目录且没有错误为止。将从 1 到 99 的顺序测试数字索引。如果超出数字范围,则输出诊断消息,并且不创建目录。如果创建了目录,则其路径名将写入标准输出。
makedir () {
local name="$1"
local suffix=
until mkdir -- "$name$suffix" 2>/dev/null; do
suffix=$(( suffix + 1 ))
if [ "$suffix" -eq 100 ]; then
echo 'Cannot create directory' >&2
return 1
fi
done
printf '%s\n' "$name$suffix"
}
这会迭代使用until
,直到mkdir
命令成功。如果suffix
计数器达到 100,则会将消息输出到错误流,并且该函数将返回非零退出状态。
可以将此函数定义添加到通常添加别名的位置。然后它将在您的下一个 shell 会话中可用。
如果您想要一个随机数而不是 1 到 99 范围内单调递增的数字:
makedir () {
local name="$1"
local tries=0
local suffix=
until mkdir -- "$name$suffix" 2>/dev/null; do
tries=$(( tries + 1 ))
if [ "$tries" -eq 100 ]; then
echo 'Cannot create directory' >&2
return 1
fi
suffix=$RANDOM
done
printf '%s\n' "$name$suffix"
}
这是几乎相同的函数,但它用作$RANDOM
后缀,这将是某个整数。和以前一样,如果该函数在 100 次尝试内仍无法创建目录,则会退出。
如果这是为了创建一个临时目录,那么最好使用mktemp -d
,而不是一些自制的东西。默认情况下,这将为您提供以下目录的名称/tmp
:
tmpdir=$( mktemp -d )
# Do some work beneath "$tmpdir".
# Then...
rm -r "$tmpdir"