这是我到目前为止所做的:
for f in 'svn ls repository_dir';
do
svn checkout repository_dir/$f/trunk/dir1/dir2/dir3/dir4/needed_dir
done
这对于在正确的位置具有needed_dir的项目(其中100个)非常有用。但是有些项目($ f)的目录结构略有不同。所以“needed_dir”可能位于不同的位置。
在do循环中,如何告诉我的bash脚本:
“查找”needed_dir“。如果找到,请查看。”
或者
“查找”needed_file.txt“。如果找到,请查看。”
感谢您的帮助
编辑:对不起,这可能更像是一个superuser.com问题。我其实想把它写在那里。但是,也许有人可以在这里帮助我!答案 0 :(得分:0)
您可以使用linux的find命令。
find
将递归搜索您提供的目录名作为参数
假设您有一个这样的目录结构:
parent
-dir1
--file1
--file2
--file3
-dir2
--file4
--file5
--file6
--dir3
现在执行以下命令:
find parent -name dir*
您将获得如下输出:
parent/dir1
parent/dir2
parent/dir2/dir3
例如,请参阅以下代码: -
#!/bin/sh
parentdir=$1
tofind=$2
for i in `find $parentdir -name $tofind*`; # * is added for regular expression..do whatever you need here
do
#check if it is directory
if [ -d $i ]; then
# do what you want to do
echo $i
else
# do something else
echo $i
fi
done
这需要输入 - >
希望这会有所帮助。如果您需要进一步的输入,请告诉我 您也可以参考此question
答案 1 :(得分:0)
没有详细说明(因为我现在没有时间)这里有一个简短的例子,你可以解决这个问题。
#!/bin/bash
sudo updatedb
if [ ! -f testfile1.txt ];
then
filelocation=$(locate awesomeo.txt)
head -10 $filelocation
fi
它的作用是更新文件数据库,如果您要查找的文件不在当前目录中,则它会找到该文件的目录并显示该文件的前十行。
但在您的情况下,您可能想要filelocation=$(locate forloopvariable)
或您正在寻找什么。这当然代替if语句将是满足您需求的else语句。
如果您有任何其他问题,请随时提出。
答案 2 :(得分:0)
这个片段应该有效,我想:
for f in $(svn ls repository_dir);
do
find repository_dir/$f -type d -name needed_dir | xargs -r svn checkout
done