我想在不同的路径中搜索文件,并在另一个文本文件UNIX中创建列表

时间:2014-09-23 07:37:14

标签: shell unix

我想制作一个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 运行正常,如果我直接运行请帮助

1 个答案:

答案 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.txtlist2.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)