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

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

新規登録して質問してみよう
ただいま回答率
85.35%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Q&A

解決済

2回答

5284閲覧

シェルスクリプトでの一番古いファイルの削除方法

chawari

総合スコア1

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

0グッド

0クリップ

投稿2020/05/01 06:53

前提・実現したいこと

シェルスクリプトで、フォルダに10個csvファイルが貯まったら、
一番古いファイルを削除するという玉突きのような処理をしたいです。
csvファイル名の末尾には処理実行時間(yyyymmddhhmm)が付与されています。
csvファイルは、とある処理の実行の際に、以下フォルダパスにmvされてきたものです。

フォルダパス
/home/archive/
aaa2018_202004281700.csv ←削除
aaa2018_202004281701.csv
aaa2018_202004281702.csv
aaa2018_202004281703.csv
aaa2018_202004281704.csv
aaa2018_202004281705.csv
aaa2018_202004281706.csv
aaa2018_202004281707.csv
aaa2018_202004281708.csv
aaa2018_202004281709.csv
aaa2018_202004281710.csv ←11個目

初心者でお恥ずかしいですが、ご教示のほどよろしくお願いいたします。

### 該当のソースコード   TranArchivePath=/home/archive/ filecount=`find $TranArchivePath/*.csv -type f | wc -l` echo $filecount if [ $filecount -eq 10 ] ; then sort $TranArchivePath/*.csv | tail -n +11 | xargs rm -f fi

発生している問題・エラーメッセージ

error 2:Substitution variable error

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

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

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

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

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

guest

回答2

0

ベストアンサー

エラーの直接の原因は、2行目の全角空白でしょう。

また、sort $TranArchivePath/*.csvだとファイルの中身をソートするので、ファイル名のソートにはなりません。sortコマンドを使わなくてもls -rでファイル名の逆順にリストされます。

方針としては、既にある回答のように、10個あるとか無いとか場合分けをしないのが良いです。

sh

1ls -r $TranArchivePath/*.csv | tail -n +11 | xargs -r rm

また、ファイルが10個以下の場合はxargsには何も渡らないので、その場合rmを実行しないようxargs -rとします。

上記は、(スクリプトファイルに書くのでなく)コマンドラインから打つときは、lsaliasされていることが多いので、lsでなく\lsあるいは/bin/lsと入力します。

投稿2020/05/01 10:11

編集2020/05/01 10:20
otn

総合スコア85901

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

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

chawari

2020/05/15 07:48

遅くなり申し訳ございません。 無事、ご教示頂いた方法で処理が上手く行きました。 本当にありがとうございました。助かりました。
guest

0

ファイル名順に並べて、後ろ10個残すなら、こうするかな。

find . -name '*.csv' | sort -r | sed -e '1,10d' | xargs -r rm

投稿2020/05/01 07:09

編集2020/05/01 12:29
shiketa

総合スコア4061

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問