首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于迭代已定义的一组文件名并执行命令的Bash脚本

用于迭代已定义的一组文件名并执行命令的Bash脚本
EN

Stack Overflow用户
提问于 2010-12-01 00:58:35
回答 4查看 923关注 0票数 2

我有一组文件夹,例如10,12,13,14,18,24等等。它们不会以任何标准的增量改变数字。然后,我需要重复地移动到文件夹中,然后再移动到下一个文件夹中,以执行SVN命令,这些命令除了一些变量扩展名之外都是相同的,例如:

代码语言:javascript
复制
/home/boy$ cp /home/files/*Session10.* . ; svn add *Session10.*; svn commit; cd ..; cd 12;

然后,下一个命令类似于:

代码语言:javascript
复制
/home/boy$ cp /home/files/*Session12.* . ; svn add *Session12.*; svn commit; cd ..; cd 14;

因此,应该定义一个数组或列表,然后是一个遍历该列表for循环,然后是一个扩展了其名称的变量,以便将其提供给cp和svn命令。有什么想法吗?我希望它可以在命令提示符中完成,而不是在bash脚本文件中完成。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-01 01:49:33

如果列表是预定义的,并且您没有遍历每个存在的目录(换句话说,如果名为99的目录存在,但不在您的列表中,您希望将其排除在外),则可以遍历该列表:

代码语言:javascript
复制
list="10 12 13 14 18 24"; for dir in $list; do cd "$dir"; do_something "foo $dir bar"; done

或数组:

代码语言:javascript
复制
array=(10 12 13 14 18 24); for idx in ${!array[@]}; do cd "${array[idx]}"; do_something "foo ${array[idx]} bar"; done

您可以像这样处理前一个或下一个数组元素:${array[idx-1]}${array[idx+1]},如果您做了适当的检查,以确保您不会试图检索具有负索引的元素(超过最后一个元素的索引将返回null)。

或者:

代码语言:javascript
复制
array=(10 12 13 14 18 24); for dir in ${array[@]}; do cd "$dir"; do_something "foo $dir bar"; done

它本质上与上面的列表示例相同。

票数 1
EN

Stack Overflow用户

发布于 2010-12-01 01:06:41

不用动脑筋的方法是:

代码语言:javascript
复制
for dir in [0-9][0-9]/; do
    cd "$dir"
    cp /home/files/*Session${dir%/}.* .
    svn add *Session${dir%/}.*
    svn commit
    cd ..
done

这将只遍历由2位数字组成的目录。

票数 2
EN

Stack Overflow用户

发布于 2010-12-01 01:03:03

base=$PWD; for num in *; do cd $base/$num; cp /home/files/*Session${num}.* .; svn add *Session${num}.*; svn commit; done

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4316322

复制
相关文章

相似问题

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