我有一个里面有很多子目录的目录,我想在每个子目录上执行一个命令。
我想要做的就是运行' svn up'
这是我到目前为止所尝试的
find . -type d -maxdepth 1 -exec svn "up '{}'" \;
和
for dir in * do cd $dir; svn up; cd ..;
到目前为止,他们都没有工作(我已经尝试了许多没有运气的事情)
答案 0 :(得分:5)
你只需要在glob上使用尾部斜杠:
for d in */; do # only match directories
( cd "$d" && svn up ) # Use a subshell to avoid having to cd back to the root each time.
done
答案 1 :(得分:2)
这似乎有效:
find . -type d -maxdepth 1 -exec svn up "{}" \;
但它试图更新当前目录,应该省略。 (虽然它对我有用,因为当前目录不是svn目录)
答案 2 :(得分:2)
这对我有用 - -d
检查目录:
for f in *; do if [ -d "$f" ]; then cd "$f"; echo "$f"; cd ..; fi; done
echo "$f"
可以代替您希望在每个目录中运行的任何命令。
请注意,这和trailing /
solution都匹配符号链接以及文件。如果要避免此行为(仅输入实际目录),可以执行以下操作:
for f in *; do if [ -d "$f" -a ! -L "$f" ]; then cd "$f"; echo "$f"; cd ..; fi done