-1

我需要使用 find-command 管理列表。假设列表在非不同列表中具有随机名称(即它们的交集不是空集)。我能怎么做:

甲\乙

查找列表 A 中的文件,但列表 B 中的文件除外

A 路口 B

查找列表 A 和 B 共有的文件

在这里咨询。

A 联合 B

查找两个列表中的所有文件

例子

$ find . | awk -F"/" '{ print $2 }'

.zcompdump
.zshrc
.bashrc
.emacs

$ find ~/bin/FilesDvorak/.* -maxdepth 0 | awk -F"/" '{ print $6 }'

.bashrc
.emacs
.gdbinit
.git

我想:

甲\乙

.zcompdump
.zshrc

A 交叉口 B :

.bashrc
.emacs

A 联合 B

.zcompdump
.zshrc
.bashrc
.emacs
.bashrc
.emacs
.gdbinit
.git

十字路口的尝试

当我将输出保存到单独的列表中时,我无法理解为什么该命令不采用常见的东西,即上面的交集:

find -f all_files -and -f right_files .

从问题中出现了问题:

  1. 找到 ~/bin/FilesDvorak/.* -maxdepth 0 -and ~/.PAST_RC_files/.*

  2. 请咨询递归查找 点击这里!

  3. 找到 ~/bin/FilesDvorak/.* -maxdepth 0 -并列出

4

2 回答 2

3

说真的,这就是 comm(1) 的用途。我认为手册页不会更清晰: http: //linux.die.net/man/1/comm

于 2009-05-21T23:29:23.667 回答
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' 了解更多信息。

于 2009-05-22T02:06:27.420 回答