无法通过 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 中也可用(可能更多),但正如您使用 bash 标记的那样,我认为这就是您想要使用的。
顺便说一句,您的代码中有一个细微的错误 - 传递给 chown
而不是 mkdir
的参数中有一个 /
。我还将您的变量名更改为小写,因为应为 shell internal 和 system-wide environment variables.
保留全大写的变量名
大括号扩展的一个很好的特性是您可以生成序列 00
、01
、02
、..
、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
我有以下 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 中也可用(可能更多),但正如您使用 bash 标记的那样,我认为这就是您想要使用的。
顺便说一句,您的代码中有一个细微的错误 - 传递给 chown
而不是 mkdir
的参数中有一个 /
。我还将您的变量名更改为小写,因为应为 shell internal 和 system-wide environment variables.
大括号扩展的一个很好的特性是您可以生成序列 00
、01
、02
、..
、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