【问题标题】:Unable to create numeric directories via sh script无法通过 sh 脚本创建数字目录
【发布时间】:2015-06-19 05:45:02
【问题描述】:

我有以下 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} 的单个文件夹。我做错了什么?

编辑:感谢您的回答。我在这篇文章中还有一个问题。如何使用两个符号的前导填充创建目录?例如0102...1011

【问题讨论】:

标签: linux bash shell ubuntu sh


【解决方案1】:

将您的 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 内部和system-wide environment variables


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

感谢 mklement0 提供有用的意见。

【讨论】:

  • 感谢您的回复,但我通过sh ./script.sh 执行我的脚本。如果我将/bin/sh 更改为/bin/bash,那么我该如何运行我的脚本呢?
  • @Erik 你应该使用bash script.sh 执行你的脚本,或者让它可执行(例如chmod +x script.sh)然后直接运行它./script.sh
  • shbash 应该被视为两个独立的程序。如果要使用 bash 功能,请不要使用sh
【解决方案2】:

或者,...使它成为一个函数,所以如果您正在运行 bash,那么您不必担心需要 sh-bang: UNTESTED。

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

并被调用:

 md_chown /var/www/upload

【讨论】:

    猜你喜欢
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 2015-01-08
    • 2016-11-04
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多