2

到目前为止,我有以下命令,只是有点卡在下一位。

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 结尾,

但是,它们也将在加载日期之前,

IE2013-11-06_MyFile20130618073529.csv

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

有什么办法可以忽略.gz, 和2013-11-06_? 请注意,2013-11-06_ 可以是 MyFile 之前的任何日期。

感谢一百万,非常感谢任何输入。

4

1 回答 1

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>_前缀


为了使上述一个班轮更具可读性,我希望将其拆分如下

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
于 2013-11-13T16:34:28.447 回答