0

bash には、タイムスタンプに基づいてディレクトリ内のすべてのファイルを一覧表示するコマンド ラインがあります。例えば、

\ls -ltr dir/file*

-rw-r--r-- 1 anon  root   338 Aug 28 12:30 g1.log
-rw-r--r-- 1 anon  root  2.9K Aug 28 12:32 g2.log
-rw-r--r-- 1 anon  root  2.9K Aug 28 12:41 g3.log
-rw-r--r-- 1 anon  root  2.9K Aug 28 13:03 g4.log
-rw-r--r-- 1 anon  root  2.9K Aug 28 13:05 g5.log

タイムスタンプが より前のすべてのファイルを一覧表示したいAug 28 13:00

アップデート :

]$ find -version
GNU find version 4.2.27
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION SELINUX 
4

6 に答える 6

5

日数がわかっている場合は、find コマンドを使用できます

find ./ -mtime -60

+60 は、60 日前に変更されたファイルを探していることを意味します。

60 は 60 日未満を意味します。

60 + または - をスキップすると、正確に 60 日を意味します。

于 2013-08-28T19:46:54.623 に答える
3

で表示される時刻ls -laは、最終更新日です。の前に最後に変更されたディレクトリ内のすべてのファイルを一覧表示するに2013/08/28 13:00:00は、次のfindコマンドを使用します。

find -maxdepth 0 -type f -newermt '2013-08-28 13:00:00'
于 2013-08-28T19:45:57.827 に答える
1

このコマンドを試してください:

read T < <(exec date -d 'Aug 28 13:00' '+%s') && find /dir -type f | while IFS= read -r FILE; do read S < <(exec stat -c '%Y' "$FILE") && [[ S -lt T ]] && echo "$FILE"; done

また、findコマンドがサポートされている場合は、次のようになります-newerXY

find /dir -type f -not -newermt 'Aug 28 13:00'
于 2013-08-28T19:37:00.313 に答える
1

私は純粋な bash ソリューションが大好きです (まあ、 and は考慮dateしていませんstat):

dateStr='Aug 28 13:00'

timestamp=$(date -d "$dateStr" +%s)
for curFile in *; do
    curFileMtime=$(stat -c %Y "$curFile")
    if (( curFileMtime < timestamp )); then
        echo "$curFile"
    fi
done

結果を並べ替えたいとは言わなかったので、結果は並べ替えられません。

于 2013-08-28T20:21:23.983 に答える
1

タイムスタンプのあるファイルにタッチして、古いファイルをすべて見つけます。

touch -d 'Aug 28 13:00' /tmp/timestamp
find . ! -newer /tmp/timestamp
于 2013-08-28T19:51:58.257 に答える