comm -12 <(ls 1) <(ls 2)
Solution with comm
comm
is great, but indeed it needs to work with sorted lists. And fortunately here we use ls
which from the ls
Bash man page:
Sort entries alphabetically if none of -cftuSUX nor --sort.
comm -12 <(ls one) <(ls two)
Alternative with sort
Intersection of two lists:
sort <(ls one) <(ls two) | uniq -d
Symmetric difference of two lists:
sort <(ls one) <(ls two) | uniq -u
Bonus
Play with it ;)
cd $(mktemp -d) && mkdir {one,two} && touch {one,two}/file_{1,2}{0..9} && touch two/file_3{0..9}
Use the comm
command:
ls one | sort > /tmp/one_list
ls two | sort > /tmp/two_list
comm -12 /tmp/one_list /tmp/two_list
"sort" is not really needed, but I always include it before using "comm" just in case.
A less efficient (than comm) alternative:
cat <(ls 1 | sort -u) <(ls 2 | sort -u) | uniq -d
Join is another good option depending on the input and desired output
join -j1 -a1 <(ls 1) <(ls 2)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With