我有一组文件夹,例如10,12,13,14,18,24等等。它们不会以任何标准的增量改变数字。然后,我需要重复地移动到文件夹中,然后再移动到下一个文件夹中,以执行SVN命令,这些命令除了一些变量扩展名之外都是相同的,例如:
/home/boy$ cp /home/files/*Session10.* . ; svn add *Session10.*; svn commit; cd ..; cd 12;然后,下一个命令类似于:
/home/boy$ cp /home/files/*Session12.* . ; svn add *Session12.*; svn commit; cd ..; cd 14;因此,应该定义一个数组或列表,然后是一个遍历该列表for循环,然后是一个扩展了其名称的变量,以便将其提供给cp和svn命令。有什么想法吗?我希望它可以在命令提示符中完成,而不是在bash脚本文件中完成。
发布于 2010-12-01 01:49:33
如果列表是预定义的,并且您没有遍历每个存在的目录(换句话说,如果名为99的目录存在,但不在您的列表中,您希望将其排除在外),则可以遍历该列表:
list="10 12 13 14 18 24"; for dir in $list; do cd "$dir"; do_something "foo $dir bar"; done或数组:
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)。
或者:
array=(10 12 13 14 18 24); for dir in ${array[@]}; do cd "$dir"; do_something "foo $dir bar"; done它本质上与上面的列表示例相同。
发布于 2010-12-01 01:06:41
不用动脑筋的方法是:
for dir in [0-9][0-9]/; do
cd "$dir"
cp /home/files/*Session${dir%/}.* .
svn add *Session${dir%/}.*
svn commit
cd ..
done这将只遍历由2位数字组成的目录。
发布于 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
https://stackoverflow.com/questions/4316322
复制相似问题