首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >遍历目录并创建子目录的Bash脚本

遍历目录并创建子目录的Bash脚本
EN

Stack Overflow用户
提问于 2017-03-10 19:27:41
回答 2查看 2.1K关注 0票数 0

我有下面的代码,它创建一个数组并遍历一个目录,并在数组的每个元素下创建一个子目录。

代码语言:javascript
运行
复制
#!/bin/bash
cd /var/www
dirs=$(find * -maxdepth 0 -type d)

for dir in "${dirs[@]}"; do
        echo $dir
        mkdir $dir/backups
done

虽然它回显所有目录,但它只在数组的最后一个元素上创建一个目录。有什么问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-10 19:29:51

发出数组初始化-将其更改为:

代码语言:javascript
运行
复制
dirs=($(find * -maxdepth 0 -type d))

但是,如果您的目录中有空白,那么上面的语句可能会有问题。

您可以使用一个简单的glob -它也处理空白:

代码语言:javascript
运行
复制
cd /var/www
dirs=(*/)
for dir in "${dirs[@]}"; do
  : your code
done
票数 0
EN

Stack Overflow用户

发布于 2017-03-10 20:21:45

特别是在bash4.4上,可以像下面这样使用readarray特性。另外,使用-maxdepth 0似乎不是一个好的选择--您可能需要使用-maxdepth 1。

代码语言:javascript
运行
复制
#!/bin/bash
cd /var/www
readarray -t -d'' dirs < <$(find . -maxdepth 1 -type d -print0)

for dir in "${dirs[@]}"; do
        echo $dir
        mkdir $dir/backups
done

但是,如果您可以使用find和mkdir -v (详细的)来完成整个工作:

代码语言:javascript
运行
复制
$ find . -maxdepth 1 -type d -name 'a*'
./appsfiles

$ find . -maxdepth 1 -type d -name 'a*' -exec mkdir -v {}/backup \;
mkdir: created directory './appsfiles/backup'

使用mkdir -v,您可以从mkdir获得详细的消息,并且可以跳过回显。

如果你无论如何都需要回声,你可以这样做:

代码语言:javascript
运行
复制
$ find . -maxdepth 1 -type d -name 'a*' -exec bash -c 'echo $0 && mkdir -v $0/backup' {} \;
./appsfiles
mkdir: created directory './appsfiles/backup'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42726281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档