Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos bash使用序列号创建目录_Macos_Bash_Mkdir - Fatal编程技术网

Macos bash使用序列号创建目录

Macos bash使用序列号创建目录,macos,bash,mkdir,Macos,Bash,Mkdir,我正在创建一个要在OS X上运行的脚本,该脚本通常由新手用户运行,因此希望通过在过去一段时间内创建一个新的目录结构来保护目录结构: target001下一次运行创建target002 到目前为止,我已经: lastDir=$(find /tmp/target* | tail -1 | cut -c 6-) let n=$n+1 mkdir "$lastDir""$n" 然而,数学在这里不起作用。那怎么办 ? 安全地创建临时文件或目录,并打印其名称。 模板在最后一个组件中必须至少包含3个连续的'

我正在创建一个要在OS X上运行的脚本,该脚本通常由新手用户运行,因此希望通过在过去一段时间内创建一个新的目录结构来保护目录结构:

target001
下一次运行创建
target002

到目前为止,我已经:

lastDir=$(find /tmp/target* | tail -1 | cut -c 6-)
let n=$n+1
mkdir "$lastDir""$n"
然而,数学在这里不起作用。

那怎么办 ?

安全地创建临时文件或目录,并打印其名称。 模板在最后一个组件中必须至少包含3个连续的'X'。 如果未指定模板,请使用tmp.xxxxxxxxx,并且--tmpdir为 暗指的。文件是u+rw创建的,目录是u+rwx,减去umask 限制。 那怎么办 ?

安全地创建临时文件或目录,并打印其名称。 模板在最后一个组件中必须至少包含3个连续的'X'。 如果未指定模板,请使用tmp.xxxxxxxxx,并且--tmpdir为 暗指的。文件是u+rw创建的,目录是u+rwx,减去umask 限制。 像这样:

lastDir=$(find /tmp/target* | tail -1)
let n=1+${lastDir##/tmp/target}
mkdir /tmp/target$(printf "%03d" $n)
像这样:

lastDir=$(find /tmp/target* | tail -1)
let n=1+${lastDir##/tmp/target}
mkdir /tmp/target$(printf "%03d" $n)

使用此行计算新序列号:

...
n=$(printf "%03d" $(( 10#$n + 1 )) )
mkdir "$lastDir""$n"

10#迫使基地10。如果最后一秒已经有$n,例如“001”。

使用此行计算新序列号:

...
n=$(printf "%03d" $(( 10#$n + 1 )) )
mkdir "$lastDir""$n"

10#迫使基地10。最后一秒已提供$n,例如“001”。

无管道和子流程:

targets=( /tmp/target* )                # all dirs in an array
lastdir=${targets[@]: (-1):1}           # select filename from last array element
lastdir=${lastdir##*/}                  # remove path
lastnumber=${lastdir/target/}           # remove 'target'
lastnumber=00$(( 10#$lastnumber + 1 ))  # increment number (base 10), add leading zeros

mkdir /tmp/target${lastnumber: -3}      # make dir; last 3 chars from lastnumber
具有2个参数的版本:

path='/tmp/x/y/z'                       # path without last part
basename='target'                       # last part

targets=( $path/${basename}* )          # all dirs in an array
lastdir=${targets[@]: (-1):1}           # select path from last entry
lastdir=${lastdir##*/}                  # select filename
lastnumber=${lastdir/$basename/}        # remove 'target'
lastnumber=00$(( 10#$lastnumber + 1 ))  # increment number (base 10), add leading zeros

mkdir $path/$basename${lastnumber: -3}  # make dir; last 3 chars from lastnumber

没有管道和子流程:

targets=( /tmp/target* )                # all dirs in an array
lastdir=${targets[@]: (-1):1}           # select filename from last array element
lastdir=${lastdir##*/}                  # remove path
lastnumber=${lastdir/target/}           # remove 'target'
lastnumber=00$(( 10#$lastnumber + 1 ))  # increment number (base 10), add leading zeros

mkdir /tmp/target${lastnumber: -3}      # make dir; last 3 chars from lastnumber
具有2个参数的版本:

path='/tmp/x/y/z'                       # path without last part
basename='target'                       # last part

targets=( $path/${basename}* )          # all dirs in an array
lastdir=${targets[@]: (-1):1}           # select path from last entry
lastdir=${lastdir##*/}                  # select filename
lastnumber=${lastdir/$basename/}        # remove 'target'
lastnumber=00$(( 10#$lastnumber + 1 ))  # increment number (base 10), add leading zeros

mkdir $path/$basename${lastnumber: -3}  # make dir; last 3 chars from lastnumber

使用扩展测试[[和BASH_重新匹配]完成解决方案:

[[ $(find /tmp/target* | tail -1) =~ ^(.*)([0-9]{3})$ ]]
mkdir $(printf "${BASH_REMATCH[1]}%03d" $(( 10#${BASH_REMATCH[2]} + 1 )) )

提供的/tmp/target001是您的目录模式。

使用扩展测试[[和BASH_重新匹配]完成解决方案:

[[ $(find /tmp/target* | tail -1) =~ ^(.*)([0-9]{3})$ ]]
mkdir $(printf "${BASH_REMATCH[1]}%03d" $(( 10#${BASH_REMATCH[2]} + 1 )) )


提供的/tmp/target001是您的目录模式。

谢谢。我很高兴知道这一点。在这种情况下,唯一关心的是随机后缀,而不是增量。
mktemp
肯定对我有其他用途。谢谢。我很高兴知道这一点。在这种情况下唯一关心的是e随机后缀而不是递增。虽然
mktemp
肯定对我有其他用途。我在这方面遇到了一个错误,因为它似乎不想递增,
mkdir/tmp/target001
我在这方面遇到了一个错误,因为它似乎不想递增,
mkdir/tmp/target001
我得到了
-bash:targets:声明
lastdir
时数组下标不正确。我在OS XThanks上使用GNU bash v3。这适用于bash 4.1及以下版本。解决方案已更改。谢谢@fgm。我还可以问一下“删除路径”是如何操作的吗代码可以工作,因为我需要在生产环境中使用不同的路径。我为任意路径添加了第二个版本。我现在得到了它,这要感谢@fgm。我正在学习。我必须使用unset,以避免在测试中看到奇怪的结果。我在声明
lastdir
时得到
-bash:targets:bad array subscript
。我使用的是GNU baOSXThanks上的ShV3。这适用于Bash4.1及以下版本。解决方案已更改。谢谢@fgm。我还可以问一下“删除路径”是如何更改的吗代码可以工作,因为我需要在生产环境中使用不同的路径。我为任意路径添加了第二个版本。我现在得到了它,感谢@fgm。我正在学习。我必须使用unset,以避免在测试中看到奇怪的结果。我得到了
target001001
,因此我只把我的答案集中在你的数学问题上。我您必须自己做一些工作,比如提取$lastDir(文件名减去序列,例如“/tmp/target”)和$n(例如“001”).鉴于此,我的解决方案将增加序列和mk目录。在这里重新编写完整的解决方案:我得到
target001001
因此,我的答案只集中在你的数学问题上。这意味着你必须自己做一些工作,比如提取$lastDir(文件名减去序列,例如“/tmp/target”)和$n(例如“001”).鉴于此,我的解决方案将增加序列,并在此处重新写入完整解决方案的目录: