无法通过 sh 脚本创建数字目录

Unable to create numeric directories via sh script

我有以下 sh 脚本:

#!/bin/sh -e

UPLOAD_DIR="/var/www/upload"
mkdir -p "${UPLOAD_DIR}"{0..99} && chown -R www-data "${UPLOAD_DIR}"/* 

但是上面的脚本并没有创建从 0 到 99 的目录,而是生成了一个名为 {0..99} 的文件夹。我做错了什么?

编辑:感谢您的回答。 post 我还有一个问题。如何创建带有前导填充到两个符号的目录?例如 01, 02...10, 11 ?

将您的 shebang 更改为 #!/bin/bash 以使用 brace expansion:

#!/bin/bash -e

upload_dir='/var/www/upload'
mkdir -p "${upload_dir}"/{0..99} && chown -R www-data "${upload_dir}"/{0..99}

此功能在 ksh 和 zsh 中也可用(可能更多),但正如您使用 标记的那样,我认为这就是您想要使用的。

顺便说一句,您的代码中有一个细微的错误 - 传递给 chown 而不是 mkdir 的参数中有一个 /。我还将您的变量名更改为小写,因为应为 shell internal 和 system-wide environment variables.

保留全大写的变量名

大括号扩展的一个很好的特性是您可以生成序列 000102..99 通过使用 {00..99}。请注意,这需要 bash 的新版本(我被告知版本 4+)。

感谢 mklement0 的帮助。

或者,...让它成为一个函数,所以如果你是 运行 bash,那么你不必担心需要 sh-bang: UNTESTED.

 md_chown () { mkdir -p ""/{00..99} && chown -R www-data ""/{00..99}; }

并调用:

 md_chown /var/www/upload