名前の時間でファイルを見つける方法は? [コピー]

名前の時間でファイルを見つける方法は? [コピー]

ファイル名に時間を含むファイルを含むディレクトリがあります。

./test.2013-06-11_06-01.gz
./test.2013-06-12_01-01.gz
./test.2013-06-13_03-01.gz
./test.2013-06-14_03-01.gz
./test.2013-06-15_04-01.gz

ファイル名を超えた場合のファイルの一覧表示方法N日これから?

答え1

これはどうですか?

maxdate=$(date -d "5 days ago" "+%Y-%m-%d");
for fn in *.gz; do
    [ "$fn" ">" "test.${maxdate}_99-99.gz" ] || echo $fn
done

日付(おそらく時間?)の後のファイル名の部分を無視していますが、必要に応じてファイル名の対応する部分を考慮するように変更するのはかなり簡単です。

この答えはStack Overflowに関する同様の質問に基づいています。https://stackoverflow.com/questions/2443078/filtering-filenames-with-bash

答え2

dateコマンドを使用して日前の日付を検索し、grepテキストファイルで検索を使用できます。

grep `date +%Y-%m-%d -d "5 days ago"` test.txt

テスト.txt:

./test.2013-06-11_06-01.gz
./test.2013-06-12_01-01.gz
./test.2013-06-13_03-01.gz
./test.2013-06-14_03-01.gz
./test.2013-06-15_04-01.gz

出力:

./test.2013-06-15_04-01.gz

今日は2013年6月20日で、5日前の2013年6月15日でした。

修正する

私が使用した最後の解決策は小さなスクリプトでした。

#!/bin/bash

FILE=$1
tmp="/tmp/tmp_$$.txt"
tmp1="/tmp/tmp1_$$.txt"
maxday=$2

cp $FILE $tmp

for i in `seq 1 $maxday`
do
    date_point=`date +%Y-%m-%d -d "$i days ago"`
    grep -v "$date_point" $tmp > $tmp1
    cp $tmp1 $tmp
done

echo "Files match:"
cat $tmp
rm -rf $tmp
rm -rf $tmp1

スクリプトはN日より古いすべてのファイルを出力から削除するため、N日より古いすべてのファイルを見つけるにはを定義する必要があります。maxday = N - 1つまり、8日より古いファイルをアーカイブするには、次のようにします。

./test.sh test.txt 7

出力:

Files match:
./test.2013-06-11_06-01.gz
./test.2013-06-12_01-01.gz

関連情報