ファイル名に時間を含むファイルを含むディレクトリがあります。
./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