Unix Bash AIX - 从一个目录中查找文件,但在另一个目录中查找文件

时间:2013-11-13 15:53:06

标签: bash shell unix csv bin

到目前为止,我有以下命令,稍微停留在下一位。

comm -23 <( find /dir1/report_dir2/dir3/2013* -name *\*MyFile* -exec basename {} \; | sort | uniq ) <( find /dir0/dir1/dir2/loadedreports/archive* -name *\*MyFile* -exec basename {} \; | sort | uniq ) > /home/Ben10/list.txt

目录1

/dir1/report_dir2/dir3/2013*中的文件是csv文件,其名称中可能有或不带.gz个扩展名,解压缩它们是不可能的,因为它们每个都有一个演出,并且我有成千上万的人。

即它们看起来像MyFile20130618073529.csvMyFile20130618073529.csv.gz

目录2

/dir0/dir1/dir2/loadedreports/archive*中的文件已加载到BI系统,并且都将以.csv结尾,

然而,它们之前也会有加载日期,

即。 2013-11-06_MyFile20130618073529.csv

我正在从这些csv文件中将它们加载到BI DB中,并检查我加载了哪些文件我需要检查哪些文件位于/dir1/report_dir2/dir3/2013*但不在dir0/dir1/dir2/loadedreports/archive*

有没有办法忽视.gz2013-11-06_?请注意,2013-11-06_可以是MyFile之前的任何日期。

万分感谢,任何输入都非常感谢。

1 个答案:

答案 0 :(得分:2)

尝试以下

comm -23 <( find /dir1/report_dir2/dir3/2013* -name '*MyFile*' | perl -pe 's/.*(MyFile[^.]*\.csv)(\.gz)?$/$1/' | sort -u ) <( find /dir0/dir1/dir2/loadedreports/archive* -name '*MyFile*' | perl -pe 's/.*(MyFile[^.]*\.csv)$/$1/' | sort -u ) > /home/Ben10/list.txt

这里的想法是使用perl搜索并替换basename替换已找到的完整文件名,以获得所需的基本名称,丢弃.gz后缀和<date>_前缀< / p>


为了使上面的一个班轮更具可读性,我宁愿将它拆分如下

find /dir1/report_dir2/dir3/2013* -name '*MyFile*' | perl -pe 's/.*(MyFile[^.]*\.csv)(\.gz)?$/$1/' | sort -u > /home/Ben10/di1_list.txt

find /dir0/dir1/dir2/loadedreports/archive* -name '*MyFile*' | perl -pe 's/.*(MyFile[^.]*\.csv)$/$1/' | sort -u > /home/Ben10/di2_list.txt

comm -23 /home/Ben10/di1_list.txt /home/Ben10/di2_list.txt > /home/Ben10/list.txt

rm /home/Ben10/di1_list.txt /home/Ben10/di2_list.txt