对于选定的两个目录,列出树下具有相同名称和相对路径的目录。不要嵌套调用find。
我甚至不知道如何开始它。应该是一些循环还是只能找到命令?
答案 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)
鉴于目录a
和b
,这是另一种看待它的方式:
(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 '^[^/]*/[^/]*$'