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

时间:2015-04-13 19:22:56

标签: linux bash shell ubuntu sh

我有以下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

2 个答案:

答案 0 :(得分:3)

将您的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


大括号扩展的一个不错的功能是,您可以使用{{1}生成序列000102..99 }}。请注意,这需要一个新版本的bash(版本4+,我被告知)。

感谢mklement0提供有用的输入。

答案 1 :(得分:0)

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

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

并调用:

 md_chown /var/www/upload