在linux中使用循环更改目录
我想更改目录以在每个目录中执行任务。代码如下:在linux中使用循环更改目录,linux,bash,unix,Linux,Bash,Unix,我想更改目录以在每个目录中执行任务。代码如下: for i in {1..10} do cd dir/subdir$i bla... bla.. bla.. done 然而,我得到了一个错误: not found [No such file or directory] 我已尝试了以下操作,但仍然出现上述错误: cd $(echo dir/subdir"$i") cd $(eval dir/subdir"$i") 问题可能是因为所有要更改为的目录都是相对于原始基目录的。 解决此问题的一种方
for i in {1..10}
do
cd dir/subdir$i
bla... bla.. bla..
done
然而,我得到了一个错误:
not found [No such file or directory]
我已尝试了以下操作,但仍然出现上述错误:
cd $(echo dir/subdir"$i")
cd $(eval dir/subdir"$i")
问题可能是因为所有要更改为的目录都是相对于原始基目录的。 解决此问题的一种方法是使用
(…)
子shell:
for i in {1..10}; do
(
cd dir/subdir$i || continue
cmd1
cmd2
)
done
另一种方法是使用cd“$OLDPWD”
返回上一个目录:
另一种方法是使用pushd
和popd
:
for i in {1..10}; do
pushd dir/subdir$i || continue
cmd1
cmd2
popd
done
第一个表单是可以的,但您应该检查以确保返回到原始目录,或者您正在子shell(即,
cd dir/subdir$i;bla bla bla;cd../.
或(cd dir/$subdir$i;bla bla bla)
)中进行cd(和操作)我也在提供cd//subdir$i
,我设置了i=1
并尝试了cd/dir/subdir$i
,其中/dir/subdir$i
是从根开始的完整目录。仍然面临同样的错误。谢谢mate@PSkocik。路径上发生了一些奇怪的事情。我现在就分类。直接从根目录给出整个路径对我来说不起作用。脱离主题,因此已经被提升:我认为当cd
失败时,应该跳过cmd1
和cmd2
。可能建议cd dir/subdir$i&&cmd1&&cmd2
。
for i in {1..10}; do
pushd dir/subdir$i || continue
cmd1
cmd2
popd
done