特定の日付以降に訪問していないディレクトリを一覧表示するには、検索を使用しますか?

特定の日付以降に訪問していないディレクトリを一覧表示するには、検索を使用しますか?

このstatコマンドを使用して、ディレクトリに最後にアクセスした日付を表示してフォーマットします。これadate

find特定の日付より前に変更されたディレクトリを見つける方法はありますか?test

答え1

シェルスクリプト

findsed、、、、sort(およびecho「使用」部分)のみを使用して、次のシェルスクリプトを試すことができます。findできることはできるstat。唯一の違いは、!テストを無効にする文字の1つです-newerat

olderdate:

#!/bin/bash

if [ $# -ne 2 ]
then
 echo "Usage:   $0 <reference date> <directory> "
 echo "Example: $0 2018-11-30 ."
 exit
fi

find "$2" -type d ! -newerat "$1" -printf "%AY-%Am-%Ad %AT  %p\n" |
 sed -e 's%\..*  /%     /%' \
     -e 's%\..*  \.%     .%' | sort

newerdate:

#!/bin/bash

if [ $# -ne 2 ]
then
 echo "Usage:   $0 <reference date> <directory> "
 echo "Example: $0 2018-11-30 ."
 exit
fi

find "$2" -type d -newerat "$1" -printf "%AY-%Am-%Ad %AT  %p\n" |
 sed -e 's%\..*  /%     /%' \
     -e 's%\..*  \.%     .%' | sort

日付だけでなく時間も指定するかhours、2番目の引数を引用するhours:minutes場合hours:minutes:seconds

./olderdate '2018-12-19 18' /path

アクセス時間の「自動」修正の説明

いくつかのテストを行った結果、場合によっては検索ディレクトリのアクセス日時が変更される可能性があることがわかりましたfindstatこれは、ディレクトリの内容が変更されたがディレクトリ自体のアクセス時間が更新されていない場合に発生するようです。

この場合、アクセス時間は現在時刻に設定されます。ただし、ディレクトリを再度検索すると、findアクセスstat日時は変わりません(ディレクトリに再度変更がない限り)。

答え2

次のように起動できます。

MY_DATE="2018-12-19 06:30"
for i in $(find . -type d)
do
    if [[  $(date -d"$(stat $i | grep ^Access | tail -1 | awk '{print $2 " " $3}')" +%s) -gt $(date -d"$MY_DATE" +%s) ]]
    then
        echo $i
    fi
done

パスにスペースが含まれているディレクトリでは機能しません。

スクリプトは実行された場所で見つかったすべてのディレクトリを繰り返し(findコマンドを変更して変更できます)、そのディレクトリに対してstatを実行してアクセス日をMY_DATE変数に指定された日付と比較します。

答え3

これは正しいですか?

$ cd ~

# adate for ./Pictures/
$ stat -c %x ./Pictures/
2018-05-18 11:08:44.326743397 -0400

# adate for ./Music/
$ stat -c %x ./Music/
2018-05-18 11:08:44.325743396 -0400

# Change das adate for ./Music/:
$ ls -la ./Music/
drwxr-xr-x. 2  leeand00 leeand00     6 May 18 2018  .
drwx------. 24 leeand00 leeand00  4096 Dec 11 09:54 .. 

# Read the adate for ./Music/ to see that it changed:
$ stat -c %x ./Music/
2018-12-19 23:35:04.789892164 -0500

# Read the adate from ./Pictures/ to see that it did not change:
$ stat -c %x ./Pictures/
2018-05-18 11:08:44.326743397 -0400

# Don't re-invent the wheel:
# `-type d` (look for folders only)
#
# `-maxdepth 1` (Only look inside this directory for folders, 
#                don't descend lower than that)
#
# `-amin -300` ()
#
$ find . -maxdepth 1 -type d -amin -300
.
./Music

関連情報