我需要使用find-command管理列表。假设列表在非不同列表中具有随机名称(即它们的交集不是空集)。我该怎么做:
A \ B
查找列表A中的文件,但列表B中的文件除外
交叉路口B
查找列表A和B的常用文件
请咨询here.
工会B
查找两个列表中的所有文件
实施例
$ find . | awk -F"/" '{ print $2 }'
.zcompdump
.zshrc
.bashrc
.emacs
$ find ~/bin/FilesDvorak/.* -maxdepth 0 | awk -F"/" '{ print $6 }'
.bashrc
.emacs
.gdbinit
.git
我想:
A \ B :
.zcompdump
.zshrc
交叉口B :
.bashrc
.emacs
A Union B :
.zcompdump
.zshrc
.bashrc
.emacs
.bashrc
.emacs
.gdbinit
.git
尝试交叉
当我将输出保存到单独的列表时,我无法理解为什么命令不采取常见的事情,即上面的交集:
find -f all_files -and -f right_files .
问题出现了问题:
找到〜/ bin / FilesDvorak /.* -maxdepth 0 - 和〜/ .PAST_RC_files /.*
请咨询递归查找 点击 !此处
找到〜/ bin / FilesDvorak /.* -maxdepth 0和列表
答案 0 :(得分:3)
说真的,这就是comm(1)的用途。我不认为该手册页可能更清晰:http://linux.die.net/man/1/comm
答案 1 :(得分:1)
有几种工具可以帮助您找到文件列表中的交集。 '发现'不是其中之一。 Find用于查找与文件系统上的特定条件匹配的文件。
以下是找到答案的一些方法。
生成两个文件列表
find . -maxdepth 1 | sort > a
(cd ~/bin/FilesDvorak/; find . -maxdepth 1 | sort > b)
现在您有两个文件a和b,其中包含目录条目而不会递归到子目录中。 (要删除前导./,您可以在查找排序之间添加“sed -e's /^.///”或您的第一个awk命令)
找到联盟
cat a b | sort -u
找到A \ B
comm -23 a b
找到交叉点
comm -12 a b
'man comm'和'man find'获取更多信息。