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

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

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

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

Q&A

解決済

2回答

139閲覧

shellscript 10日以上前のfileを検索

退会済みユーザー

退会済みユーザー

総合スコア0

Linux

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

0グッド

0クリップ

投稿2019/01/13 06:11

編集2019/01/15 11:42

#!/bin/bash
###変数宣言###
修正しました。

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

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

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

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

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

fu7mu4

2019/01/13 06:16

bashなどのソースコードを記載する場合、コードブロックを使用してください。
退会済みユーザー

退会済みユーザー

2019/01/13 06:20

失礼いたしました。コードブロックが何か確認して修正致しました。
fu7mu4

2019/01/13 06:28

以下のコマンドでどのようなエラーが出るかを貼っていただけますか? TOPDIRは検索するフォルダです。 ```bash find ${TOPDIR} -mtime +10 -exec gzip {} ¥; ```
fu7mu4

2019/01/13 06:30

現在の仕様では10日前のファイルをgzipするとありますが、10日より以前にスクリプトが生成したgzipファイルも圧縮するということでよいのでしょうか?
退会済みユーザー

退会済みユーザー

2019/01/13 06:39

``` topdir="探したいdirフルパス" ``` 仮fileを日付別に作成して確認してみました。それ以上前のものに関してはエラー吐かずに gip化されました。ありがとうございます。 ご指摘の通り、既にgip化されているものに関しては静観です。 findで! -name "*.gz"を追加すれば解決しました。
退会済みユーザー

退会済みユーザー

2019/01/13 06:45

最初、findで検索したfileをxargsで引き渡し別dirにcpさせる というスクリプトを書いたのですが、 もっと変数に入れてのちの修正しやすさを意識するよう指示されたので、 変数にどうやったら入るかを検討している最中です。。
ssasaki

2019/01/13 06:49

よくわかりませんが、結局質問内容については find で解決したということでしょうか?
退会済みユーザー

退会済みユーザー

2019/01/13 06:57

書き方、質問の仕方が悪く申し訳ありません。 ``` check_day=`date --date '10 days ago' '+%Y%m%d'` ``` この部分が10日以上前に作成されたfileでも検索可能にしたいというのが 質問内容になります。 findで検索して、それをxargsなどで引き渡してgipかけたり、cpさせたりは実装可能でした。 が、長いので変数に代入するよう指示されているのです。 明確に何日前作成分ならば最初に投稿したもので対応出来ていますが、 何日以上前とすると、-mtimeや-ctimeを変数に入れる事が私が出来ていなく質問しました。
ssasaki

2019/01/13 07:06

であれば、うまくいかない具体例を記載した方が良いと思いますよ。 find -mtime などで対応するのがスタンダードだと思いますので、その質問をそのまま回答するならば、「それでうまくいく」になりますので。
退会済みユーザー

退会済みユーザー

2019/01/13 11:16

何度も質問して申し訳ありません。-exec gzip {} ¥; zipさせた後、別のcpする処理を走らせたいのですが、 ¥;はどういう単語で検索したらネットで詳細出てくるのでしょうか?? exec単品だと何をしているのが{}に入れてあげているというのは理解できたのですが、 そのあと\;に関して、何を意味してるのかが理解できてなく・・・
otn

2019/01/13 11:51

> ¥;はどういう単語で検索したらネットで詳細出てくるのでしょうか?? man findです。検索せずとも、man findというコマンドを実行すれば説明が詳しく出てきます。
guest

回答2

0

-mtime+は、「より大きい」を意味するので、「10日以上」の時は+9にします。

sh

1find -name "${hostname}_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" -mtime +9 | 2xargs -r gzip

投稿2019/01/13 12:02

otn

総合スコア84505

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

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

0

ベストアンサー

例えば、このような形に変更するとLimitDay変数の値を変更すると10日を簡単に変更できます。

bash

1LimitDay=10 2 3LIMTIMEARGS="+${LimitDay}" 4 5find ${TOPDIR} -mtime ${LIMTIMEARGS} -exec gzip {} ¥;

投稿2019/01/13 07:20

編集2019/01/13 07:21
fu7mu4

総合スコア1088

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

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

退会済みユーザー

退会済みユーザー

2019/01/13 08:17

最初に記述したfindで探して、xargsでつないで、zipさせ、別dirへcpさせるコマンドです ``` #find /var/log/hogehoge ! -name "*.gz" -name "$TARGETHOST_*" -mtime +30 | xargs -I {} sh -c 'gzip {} && cp {}.gz /var/backup/hogehoge' ``` 変数に入れて整理かけたものが下記になります。明確に10日前!のものしかgipされず gipかかってるものがあると既に存在するけど上書きする?とエラーが出てしまいます 課題としては、 ・10日以上前のものでもgipされてないfileが存在すれば圧縮したい ```#!/bin/bash hogehoge="/var/backup/hogehoge" check_day=`date --date '10 days ago' '+%Y%m%d'` hostname="XXXX" target_file=$(find ${hostname}_${check_day}) if [ -e "$target_file" ]; then gzip ${target_file} cp ${target_file}.gz ${hogehoge} fi ```
退会済みユーザー

退会済みユーザー

2019/01/13 08:21

-findから-execでgipさせた後に、別場所dirへ移動が引数がないと表示され、 execに関してラッパースクリプトとか、私には理解がまだ足りなく xargsでつないで何とか実装しているところです。。。
fu7mu4

2019/01/13 12:54

cp を mv -f にしておけばそこには残らないからエラーがでないと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問