findコマンドを使用して、コマンドが実行された日より1日前のフォルダー内のファイルを見つけようとします。次のコマンドを使用します。
FILES_dcn=($(find $dir_dcn -maxdepth 1 -type f -name "*.pcap" -mtime +1 -print0 | xargs -0 ls -lt | tail -15 | awk '{print $9}'))
ただし、出力は次のようになります。
-rw-rw-rw- 1 nethawk nethawk 2097664 Mar 16 01:58 /mnt/md0/capture/dcn/dcn_2014_03_16_01_58_00_438.pcap
-rw-r--r-- 1 root root 27935978 Mar 17 10:00 /mnt/md0/capture/dcn/dcn_2014_03_16_18_29_18_983.pcap
-rw-rw-rw- 1 nethawk nethawk 2097296 Mar 17 10:02 /mnt/md0/capture/dcn/dcn_2014_03_17_10_02_00_335.pcap
-rw-rw-rw- 1 nethawk nethawk 2097192 Mar 17 10:02 /mnt/md0/capture/dcn/dcn_2014_03_17_10_02_49_476.pcap
-rw-rw-rw- 1 nethawk nethawk 2097936 Mar 17 10:07 /mnt/md0/capture/dcn/dcn_2014_03_17_10_06_59_326.pcap
-rw-rw-rw- 1 nethawk nethawk 2097464 Mar 17 10:10 /mnt/md0/capture/dcn/dcn_2014_03_17_10_10_00_407.pcap
-rw-rw-rw- 1 nethawk nethawk 2097232 Mar 17 10:13 /mnt/md0/capture/dcn/dcn_2014_03_17_10_13_48_603.pcap
-rw-rw-rw- 1 nethawk nethawk 426800 Mar 17 10:14 /mnt/md0/capture/dcn/dcn_2014_03_17_10_13_58_428.pcap
-rw-rw-rw- 1 nethawk nethawk 2097544 Mar 17 10:14 /mnt/md0/capture/dcn/dcn_2014_03_17_10_14_10_259.pcap
-rw-rw-rw- 1 nethawk nethawk 2097600 Mar 17 10:14 /mnt/md0/capture/dcn/dcn_2014_03_17_10_14_49_609.pcap
-rw-rw-rw- 1 nethawk nethawk 2097472 Mar 17 10:17 /mnt/md0/capture/dcn/dcn_2014_03_17_10_16_59_503.pcap
-rw-rw-rw- 1 nethawk nethawk 2097696 Mar 17 10:17 /mnt/md0/capture/dcn/dcn_2014_03_17_10_17_48_698.pcap
-rw-rw-rw- 1 nethawk nethawk 2098048 Mar 17 10:18 /mnt/md0/capture/dcn/dcn_2014_03_17_10_18_29_981.pcap
-rw-rw-rw- 1 nethawk nethawk 2097352 Mar 17 10:20 /mnt/md0/capture/dcn/dcn_2014_03_17_10_20_10_320.pcap
-rw-rw-rw- 1 nethawk nethawk 2097416 Mar 17 10:20 /mnt/md0/capture/dcn/dcn_2014_03_17_10_20_49_703.pcap
やらなければならなかった
-rw-rw-rw- 1 nethawk nethawk 2097296 2014-03-17 10:02 dcn_2014_03_17_10_02_00_335.pcap
-rw-rw-rw- 1 nethawk nethawk 443736 2014-03-17 10:02 dcn_2014_03_17_10_01_58_254.pcap
-rw-rw-rw- 1 nethawk nethawk 2098136 2014-03-17 10:01 dcn_2014_03_17_10_01_48_427.pcap
-rw-rw-rw- 1 nethawk nethawk 2097456 2014-03-17 10:01 dcn_2014_03_17_10_01_38_622.pcap
-rw-rw-rw- 1 nethawk nethawk 2097480 2014-03-17 10:01 dcn_2014_03_17_10_01_28_773.pcap
-rw-rw-rw- 1 nethawk nethawk 2097184 2014-03-17 10:01 dcn_2014_03_17_10_01_18_966.pcap
-rw-rw-rw- 1 nethawk nethawk 2097184 2014-03-17 10:01 dcn_2014_03_17_10_01_09_127.pcap
-rw-rw-rw- 1 nethawk nethawk 2097272 2014-03-17 10:01 dcn_2014_03_17_10_00_59_280.pcap
-rw-rw-rw- 1 nethawk nethawk 2097896 2014-03-17 10:00 dcn_2014_03_17_10_00_49_462.pcap
-rw-rw-rw- 1 nethawk nethawk 2097376 2014-03-17 10:00 dcn_2014_03_17_10_00_39_653.pcap
-rw-rw-rw- 1 nethawk nethawk 2097344 2014-03-17 10:00 dcn_2014_03_17_10_00_29_816.pcap
-rw-rw-rw- 1 nethawk nethawk 2097656 2014-03-17 10:00 dcn_2014_03_17_10_00_19_977.pcap
-rw-rw-rw- 1 nethawk nethawk 2097232 2014-03-17 10:00 dcn_2014_03_17_10_00_10_172.pcap
-rw-rw-rw- 1 nethawk nethawk 2097656 2014-03-17 10:00 dcn_2014_03_17_10_00_00_323.pcap
-rw-rw-rw- 1 nethawk nethawk 435544 2014-03-17 10:00 dcn_2014_03_17_09_59_58_280.pcap
現在時刻は2014年3月21日金曜日16:10:42 UTCです。なぜこれが起こるのですか?このファイルは Samba 共有ドライブに保存されます。
答え1
find
すべての条件が true の場合、コマンドは目的の結果を表示します。それ以外の場合、予期しない出力が発生し、動作しないように見えます。
find
正確に24時間のファイルが必要です-mtime 1
。ただし、この条件を満たすファイルがない場合は、ls -lt
パス内のすべてのファイルが一覧表示されますfind
。
同様に、で終わるファイルを検索しましたが、見つからない場合は、その-name "*nopcap"
パスnopcap
の下のすべてのファイルが表示されます。find
find
マニュアルページによると:
Numeric arguments can be specified as +n for greater than n, -n for less than n, n for exactly n.
...
-mtime n File’s data was last modified n*24 hours ago. See the comments for -atime to understand how rounding affects the interpretation of file modification times.
答え2
使用する構文は、24時間より古いファイルを探します。現在時刻については、以前に変更Fri Mar 21 16:10:42 UTC 2014
されたファイルになりますFri Mar 20 16:10:42 UTC 2014
。しかし、あなたの質問によると、ファイルが以前に変更されたと予想されるようですFri Mar 21 00:00:00 UTC 2014
。
方法は、一時ファイルを作成し、変更時間を今日の真夜中に変更することです(日付のみを指定してください)。その後、コマンドfind
をそのファイルと比較できます。これはLinuxで実行されます。
time_file=$(mktemp)
touch -d "$(date +%F)" "$time_file"
find $dir_dcn -maxdepth 1 -type f -name "*.pcap" ! -newer "$time_file" \
-exec ls -lt {} + |
tail -15 |
awk '{print $(NF-1)}'
rm "$time_file"
これは+%F
ここで使用する必要があるPOSIXではないことに注意してください+%Y-%m-%d
(mktemp
POSIXではありませんが、ほとんどのUnixシリーズシステムで見つけることができます)。また、公開した出力の時間形式の違いに注意してください。最初のファイル名はフィールド 9、2 番目のフィールドは 8 です。これは、ロケール関連の環境変数がどのように設定されるかによって異なります。awk
特定のフィールド番号の代わりに最後のフィールドを印刷してこの問題を解決しました。ファイル名にスペースなどがない場合に機能します。
修正する
xargs
実際に予想出力と予想出力を詳しく見ると、あまりにも多くのファイルが複数回実行されているように見えますls
。これにより、ファイルが正しくソートされません。ファイルに日付スタンプが付いてsort
いるのでls
。
time_file=$(mktemp)
touch -d "$(date +%F)" "$time_file"
find $dir_dcn -maxdepth 1 -type f -name "*.pcap" ! -newer "$time_file" |
sort |
tail -15
rm "$time_file"