Bash 脚本 - 查找目录并在其中执行某些操作。或者查找文件并对其执行某些操作

Bash 脚本 - 查找目录并在其中执行某些操作。或者查找文件并对其执行某些操作

这是我目前所拥有的:

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

这对于将needed_dir 放在正确位置的项目(数百个)非常有用。但有些项目 ($f) 的目录结构略有不同。因此“needed_dir”可能位于不同的位置。

在 do 循环中,我怎样才能告诉我的 bash 脚本:

“查找“needed_dir”。如果找到,请检查它。”

或者

“查找“needed_file.txt”。如果找到,请检查它。”

感谢您的任何帮助

答案1

这可能是最简单的寻找

要执行或目录树中svn checkout命名的每个目录,请使用以下命令:needed_dirrepository_dir/$f/trunk

find repository_dir/$f/trunk/ -type d -name needed_dir -exec svn checkout {} \;

{}用找到的目录的名称来查找替代品。

开关-type d仅查找目录,而-type f仅查找文件。

答案2

抱歉,我没有足够的声誉来发表评论,所以我必须创建一个新的答案。

find命令在这里不起作用,因为它只能搜索磁盘上的目录。(因此,只有当您首先 svn checkout 整个“repository_dir”时,它才会起作用。)

StackOverflow 上的以下链接对于类似的问题。那里给出的答案与此类似,但更合适:

for f in 'svn ls -R repository_dir | grep "needed_dir"'; 
do 
svn checkout repository_dir/$f
done

svn 的 -R 选项使 svn 递归列出 URL 处的所有内容。Grep 搜索您需要的目录。

不管怎样,您可以使用命令xargs而不是 for 循环,使其更简洁一些。

svn list -R <URL> | grep "needed_dir" | xargs --max-args=1 -I'{}' svn co <URL>'{}'

Xargs 对 svn list 和 grep 发现的每个空格分隔的单词运行“svn co (path-in-url)”。(奇怪的 -I'{}' 是必需的,否则 xargs 会在 URL 和子目录名称之间放置一个空格。)

相关内容