質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

4回答

271閲覧

ファイル削除について

pbdev

総合スコア21

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2018/09/25 02:57

現在shellの作成をしていますが以下のことで困っています。

フォーマット:yyyymmddhhmmss.txt
上記のフォーマットのタイムスタンプ(日付)が現在日時の2か月前以前のファイルを削除したいのですがどのようなコマンドを入力すればよいのかわかりません。
どなたかご回答お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dice142

2018/09/25 03:09

「shellを作成しています」とありますが、shellスクリプトを作成しているという意味でしょうか?
pbdev

2018/09/25 03:57

shellスクリプトの認識であっています。
a_saitoh

2018/09/25 15:05

「2ヶ月前」とはどういう意図ですか?3月31日の2ヶ月前はどうしたいか決めていますか?これが「60日以上前」でかまわないのなら結構楽になります。
pbdev

2018/09/25 23:50

2カ月と記しているので月単位ということになります。
a_saitoh

2018/09/26 01:26 編集

その「月単位」ってのは3月31日だろうと3月1日だろうと、同じく1月31日以前のファイルは消したいという意図の「月単位」ですか?日数の数え方の法律に照らすと「2ヶ月前」は二つ前の月の同日を意味するので確認したかったのですが。
guest

回答4

0

ベストアンサー

ファイル名でなく、ファイルの持つ「変更日時」を見るのであれば、

Bah

1find -mtime +60 -name "*.txt" | xargs -r rm

です。2ヶ月というのは単純には指定できないので、60日以上という日数にしています。

ファイル名で見る場合は、1つずつファイル名をチェックして判断する必要があります。
[[ < ]]で文字列としての大小比較を行います。

Bash

1OLD=$(date +%Y%m%d%H%M%S.txt -d "- 2 months") 2for f in *.txt 3do if [[ $f < $OLD ]] 4 then rm $f 5 fi 6done

投稿2018/09/25 03:28

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんな漢字で、

bash

1$ ls -1 *.txt 220180724123456.txt 320180725123456.txt 420180726123456.txt 520180727123456.txt 620180728123456.txt 7$ d=`date -d '2 months ago' '+%Y%m%d%H%M%S'`.txt;ls *.txt|grep -E '^[0-9]{14}.txt$'|while read f;do [[ $f < $d ]]&&echo $f;done 820180724123456.txt 920180725123456.txt 10$ d=`date -d '2 months ago' '+%Y%m%d%H%M%S'`.txt;ls *.txt|grep -E '^[0-9]{14}.txt$'|while read f;do [[ $f < $d ]]&&echo $f;done|xargs rm 11$ ls -1 *.txt 1220180726123456.txt 1320180727123456.txt 1420180728123456.txt

上記のように'N months ago'とすれば、月の大小を考慮して計算してくれます。
60日前なら'60 days ago'とします。

投稿2018/09/25 14:38

編集2018/09/25 14:53
hichon

総合スコア5737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

perlを使う例。

perl

1#!/usr/bin/perl -w 2use strict; 3use Time::Piece; 4 5foreach my $file (<*.txt>){ 6 $file=~/^\d{14}.txt$/ or next; 7 my $t = new Time::Piece->strptime($file, "%Y%m%d%H%M%S.txt"); 8 my $now = localtime(); 9 my $d = $now -$t; 10 if($d->months() > 2){ 11 print "delete $file\n"; 12 unlink $file; 13 }else{ 14 print "keep $file\n"; 15 } 16}

投稿2018/09/25 03:44

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もし、ファイル名ではなくファイルのタイムスタンプでよければ find -mtime xx とかで取れますね。
あくまでもファイル名で取得する場合には、shell script の類を作成するしかないと思います。

投稿2018/09/25 03:07

ssasaki

総合スコア1167

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問