Bash脚本 - 查找目录,并在其中执行某些操作。或找到一个文件,并用它做一些事情

时间:2013-03-26 04:00:14

标签: linux bash ubuntu command-line terminal

这是我到目前为止所做的:

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问题。我其实想把它写在那里。但是,也许有人可以在这里帮助我!

3 个答案:

答案 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

这需要输入 - >

  1. 您的svn父目录
  2. 要搜索的文件/目录的名称
  3. 希望这会有所帮助。如果您需要进一步的输入,请告诉我 您也可以参考此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