我想制作一个unix脚本,其中搜索文件名在不同路径中,如果找到,则将该名称保存在另一个文本文件中。
我想在不同路径中列出类似文件名,并将该列表保存在另一个文本文件中。
当找到类似的文件名时,我的列表应该一个接一个地附加所有名称。
EG。 path1 has
A B C D files
and path2 has
A E F D files
当按文件名搜索时,A和D在两者中,然后在另一个文本文件列表中应该保存类似文件。
HERE A D
应该在另一个txt文件中
请帮忙
我根据我的帮助编写了脚本,但是它给出了意想不到的令牌'('
#!/bin/sh
export file1=/home/ay/object_list.txt
export file2=/var/opt/cia/db_extract/object_list.txt
comm -1 -2 <(sort ${file1})<(sort ${file2}) >searchlist.txt
但显示出意外的令牌 comm -1 -2&lt;(sort $ {file1})&lt;(sort $ {file2})&gt; searchlist.txt 运行正常,如果我直接运行请帮助
答案 0 :(得分:1)
原始答案
这样的事情:
comm -1 -2 <(cd dir1 && find . -type f | sort) <(cd dir2 && find . -type f|sort) > file.txt
其工作原理如下。第一个<(...)
中的部分更改为您指定的第一个目录(dir1),并生成其中所有文件的列表,然后对其进行排序。第二个<(...)
为第二个目录生成类似的列表。然后comm
命令比较两个列表并打印第3列中的公共条目,使用-1 -2
来抑制第1列和第2列。
更新以回应问题
如果您已经拥有这两个文件,则需要先对它们进行排序,以便comm
正常工作。所以,假设你有list1.txt
和list2.txt
,你可以这样做:
sort list1.txt > a.txt
sort list2.txt > b.txt
comm -1 -2 a.txt b.txt
或者,以下内容更短:
comm -1 -2 <(sort list1.txt) <(sort list2.txt)