描述:列表/home/foo/dirlist.txt包含/ tmp / a .. / tmp / z
目标:创建子目录,例如/ tmp / a / 2014/04,/ tmp / b / 2014/04 ... / tmp / z / 2014/04
错误:当文件只有一个目录(例如/ tmp / a)时,它只会创建子目录 并且在执行后预期最终结果为/ tmp / a / 2014/04。但是,当文件有多个条目,例如/ tmp / a ... / tmp / z 没有创建子目录*
我如何实现目标?非常感谢任何提示和指示。
## /home/foo/dirlist.txt contains /tmp/a /tmp/b .. /tmp/z
archdirs=`/usr/bin/cat "/home/foo/dirlist.txt"`
YYYY=`/usr/bin/date '+%Y'`
MM=`/usr/bin/date '+%m'`
for i in "${archdirs[@]}";
do
if [ ! -d "$i/${YYYY}/${MM}" ]; then
/usr/bin/mkdir -p "$i/${YYYY}/${MM}"
fi
done
答案 0 :(得分:2)
请理解这个答案不是鱼,这是一个钓鱼课。
首先使用一些print语句调试它,看看数组迭代甚至尝试使用你认为它正在使用的值。在尝试打印i
是我甚至看到的所有?测试声明怎么样,测试甚至通过? (为什么还要检查行是否存在?只是逃避错误?)
然后,如果那不是问题,那就更深层次地移动等等。
如果我们不这样做,可能会有许多其他可能导致问题的可能性。
此时你应该意识到这个问题与mkdir,年,月,aix或你的bash语法之外的任何事情无关。
祝你好运!答案 1 :(得分:1)
您的变量archdirs不是数组而是单个字符串。以这种方式更改脚本以逐行阅读:
archdirs=`/usr/bin/cat "/home/foo/dirlist.txt"`
YYYY=`/usr/bin/date '+%Y'`
MM=`/usr/bin/date '+%m'`
cat "/home/foo/dirlist.txt" | while read i
do
if [ ! -d "$i/${YYYY}/${MM}" ]; then
/usr/bin/mkdir -p "$i/${YYYY}/${MM}"
fi
done