複数のjarを実行して異なるディレクトリに異なるファイルを作成するシェルスクリプトを実行しています。
最後に、スクリプトを実行したときの出力としてディレクトリに生成されたファイルのリストを取得したいと思います。
私のファイルの名前はですdate_time_ABC.txt
。日付別にファイル名を取得したいが、特定の日付に複数回実行できるため、前の実行で生成されたファイルを含むすべてのファイルをインポートします。
シェルスクリプトを実行した後に生成されたファイルのリストを取得する方法はありますか?提案してください。
答え1
もしあなたの時間含まれていない第二ls
、次のオプションを使用できます-u
。
-uと-lt:アクセス時間に基づいてソートして表示します。 -l を使用すると、アクセス時間が表示され、名前に基づいてソートされます。それ以外の場合は、アクセス時間に基づいてソートします。
それ以外の場合は、現在のファイルを一覧表示し、ls -u -1>../Before
コードの後に再度実行すると、次のように操作が完了しますls -u -1 > ../After
。 comm -3 ../After ../Before
答え2
ただ考えです。 2つのディレクトリを維持してください。最初のディレクトリにはスクリプトに関連付けられているファイル(作業ディレクトリ)が含まれ、2番目のディレクトリには同期ファイル(ミラーディレクトリ)が含まれています。スクリプト同期コマンドの最初の行に入力します。
rsync -xrlptgoEvv /home/user/work/ /home/user/mirror/
そして、スクリプトコマンドの最後にディレクトリ間の違いを検出し、work
出力mirror
をプレーンテキストファイルにリダイレクトします。
diff -rq /home/user/work/ /home/user/mirror/ > /home/user/list-of-files.txt
diff
などを使用してコマンド出力をフィルタリングして、必要なデータ型を取得することもできますsed
。awk
また、最後の同期以降にディレクトリから削除されたファイルをディレクトリから削除するオプションも検討してください--delete
。rsync
mirror
work
直す。より良いアプローチは、スクリプトの上にファイルのリストを作成することです。
ls -la /home/user/work/ > /home/user/list-of-files.txt
そして、スクリプトの下部で新しいファイルのリストを前のリストに追加し、それをソートした後、新しいファイルを表す一意の行だけをフィルタリングします。
ls -la /home/user/work/ >> /home/user/list-of-files.txt
cat /home/user/list-of-files.txt | sort | uniq -u > /home/user/list-of-new-files.txt