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.csvつまり、それらは次のようになりますMyFile20130618073529.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 より前の任意の日付にすることができます。

百万人に感謝します。どんな意見でも大歓迎です。

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 に答える