如何列出(对于给定的两个目录)树下具有相同名称和相对路径的目录。

时间:2014-01-23 13:34:05

标签: linux bash find

对于选定的两个目录,列出树下具有相同名称和相对路径的目录。不要嵌套调用find。

我甚至不知道如何开始它。应该是一些循环还是只能找到命令?

2 个答案:

答案 0 :(得分:0)

走第一个目录,记录所有子目录。步行第二个并在任何时候发现匹配报告。这应该有效:

{ find a -type d; find b -type d; } | 
  awk '/^a/ { a[$NF]=$0 } 
       /^b/ {if( $NF in a) print $0,a[$NF]}' FS=/

请注意,如果子目录的名称在a中重复,那么它只会列出一次,如果b中出现重复,则会列出每个外观。要解决第一个问题,您只需执行a[$NF]=a[$NF]":"$0即可。修复第二个是留给读者的练习。 (而不是在找到匹配项时打印,将事件记录在数组中并在END块中报告。)

答案 1 :(得分:0)

鉴于目录ab,这是另一种看待它的方式:

(cd a && find -type d ; cd ../b && find -type d) | sort | uniq -d

如果您只想列出顶级目录,则向管道添加grep会删除所有子目录:

(cd a && find -type d ; cd ../b && find -type d) | sort | uniq -d | grep '^[^/]*/[^/]*$'

稍微容易阅读:

(cd a && find -type d ; cd ../b && find -type d) \
  | sort \
  | uniq -d \
  | grep '^[^/]*/[^/]*$'