我正在尝试编写一个简单的脚本,列出两个列表中的内容.为简化起见,我们以ls为例.想象一下"一个"和"两个"是目录.
one=`ls one` two=`ls two` intersection $one $two
我在bash中仍然很绿,所以请随时纠正我这样做的方式.我只需要一些命令,打印出"one"和"two"中的所有文件.它们必须存在于两者中.你可以把它称为"一"和"两"之间的"交集".
gho*_*g74 261
comm -12 <(ls 1) <(ls 2)
Run Code Online (Sandbox Code Playgroud)
Jea*_*aud 52
解决方案 comm
comm很棒,但确实需要使用排序列表.幸运的是,我们在这里使用ls了lsBash手册页
如果没有-cftuSUX或--sort,则按字母顺序对条目进行排序.
comm -12 <(ls one) <(ls two)
Run Code Online (Sandbox Code Playgroud)
替代 sort
两个列表的交集:
sort <(ls one) <(ls two) | uniq -d
Run Code Online (Sandbox Code Playgroud)
两个列表的对称差异:
sort <(ls one) <(ls two) | uniq -u
Run Code Online (Sandbox Code Playgroud)
奖金
玩它;)
cd $(mktemp -d) && mkdir {one,two} && touch {one,two}/file_{1,2}{0..9} && touch two/file_3{0..9}
Run Code Online (Sandbox Code Playgroud)
DVK*_*DVK 28
使用comm命令:
ls one | sort > /tmp/one_list
ls two | sort > /tmp/two_list
comm -12 /tmp/one_list /tmp/two_list
Run Code Online (Sandbox Code Playgroud)
"sort"并不是真的需要,但我总是在使用"comm"之前将其包括在内以防万一.