JavaScriptを有効にしてください

lsとtailでn個目以降のファイルを取得する

 · 

lsとtailでn個目以降のファイルを取得する

更新日時が新しいファイルを2つ残して、3つ目以降のファイルは全て削除したいという状況になったので、ワンライナーでできないかと試行錯誤した時の備忘録です。

上記の条件を満たすコマンドは下記になりました。

1
ls -1t *.txt | tail -n +3 | xargs -p rm

これだけです。割と簡単にできました。
こちらは削除コマンドが入っていますのでコピーして実行する際はお気を付けください。
※xargsは事故防止のためpオプションを付けています。pオプションはxargsが生成したコマンドを確認するものになります

では、それぞれのコマンドの詳細を解説していきます。

縦並びで更新日時の新しい順にファイルを取得するコマンド

ls -1t *.txtは縦並びで更新日時の新しい順にファイルを取得するコマンドです。

1
ls -1t *.txt

ディレクトリの場合は下記コマンドになります。

1
ls -1td test*

dオプションを追加するだけです。

各オプションの意味は次の通りです。

1オプション

1オプションを指定すると、1行に1つのファイルを表示するようになります。
こちらを指定しないと横並びになってしまい、次のtailコマンドで処理ができなくなってしまいます。

ちなみにこちらは数字の1になります。英字のlではないので注意してください。

tオプション

tオプションは、更新日時の新しい順(降順)にソートします。

更新日時の古い順(昇順)にソートしたい場合はrオプションを追加して並び順を反転させましょう。

dオプション

dオプションは、ディレクトリの内容ではなくディレクトリ名を一覧表示します。

ディレクトリを対象としたい場合に、dオプションを指定しないとディレクトリの中身のファイルが表示されてしまうため、ディレクトリを削除するつもりが中身のファイルだけ削除されることになってしまいます。

では次にtailコマンドを解説します。

3行目以降を取得するコマンド

tail -n +33行目以降を取得するコマンドです。

1
tail -n +3

tailコマンドをオプションなしでそのまま実行すると、ファイルの最後の10行を出力するコマンドになります。

nオプションの意味は次の通りです。

nオプション

nオプションを指定すると、nオプションの後に指定した数値によって出力される行数を制御できます。
例えばtail -n 5の場合はファイルの最後の5行を出力するコマンドになります。

今回のようにn行目以降を取得したい場合は+指定子を使います。
+指定子を数字の前に付けると、ファイル全体からn行目以降という動作に変化します。
今回は3行目以降が欲しいので、+3を指定しています。

xargsについて

最後のxargsについては下記記事で解説していますので、ぜひご一読ください。
linuxのコマンドラインでargument list too longエラーが出た時の対処方法


スポンサーリンク

共有

もふもふ
著者
もふもふ
プログラマ。汎用系→ゲームエンジニア→Webエンジニア→QAエンジニア