2013-03-26 30 views
1

某事,這是我到目前爲止有:Bash腳本 - 查找目錄,並在其中執行操作。或查找文件,並用它做

for f in 'svn ls repository_dir'; 
do 
svn checkout repository_dir/$f/trunk/dir1/dir2/dir3/dir4/needed_dir 
done 

這偉大工程項目(其中100的)那些在正確的地方needed_dir。但是一些項目($ f)的目錄結構稍有不同。所以「need_dir」可能位於不同的位置。

在做循環,我怎麼能告訴我的bash腳本:

「查找‘needed_dir’。如果找到了,檢查出來。」

或者

「查找 」needed_file.txt「。如果找到了,檢查出來。」

感謝您的幫助

編輯:對不起,這可能更多的是superuser.com問題。我其實打算寫在那裏。但是,也許有人可以幫助我呢!

回答

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. 名字搜索


希望這有助於。讓我知道你是否需要進一步的投入。你
也可以參考這個question

0

沒有去成很大的細節(因爲我沒有時間截至目前),這裏是一個簡單的例子來,你可以關閉的工作。

#!/bin/bash 

sudo updatedb 
if [ ! -f testfile1.txt ]; 
then 
filelocation=$(locate awesomeo.txt) 
head -10 $filelocation 
fi 

它所做的是更新文件數據庫中,如果您正在尋找的文件不在當前目錄下,然後在找到的文件的目錄,並顯示前十行該文件。

但在你的情況下,你可能想要做filelocation=$(locate forloopvariable)或你在找什麼。這當然不是if語句,而是else語句來匹配您的需求。

如果您有任何其他問題隨時問。

0

這段代碼應該工作,我想:

for f in $(svn ls repository_dir); 
do 
    find repository_dir/$f -type d -name needed_dir | xargs -r svn checkout 
done 
相關問題