lsとtailでn個目以降のファイルを取得する
更新日時が新しいファイルを2つ残して、3つ目以降のファイルは全て削除したいという状況になったので、ワンライナーでできないかと試行錯誤した時の備忘録です。
上記の条件を満たすコマンドは下記になりました。
|
|
これだけです。割と簡単にできました。
こちらは削除コマンドが入っていますのでコピーして実行する際はお気を付けください。
※xargsは事故防止のためpオプションを付けています。pオプションはxargsが生成したコマンドを確認するものになります
では、それぞれのコマンドの詳細を解説していきます。
縦並びで更新日時の新しい順にファイルを取得するコマンド
ls -1t *.txt
は縦並びで更新日時の新しい順にファイルを取得するコマンドです。
|
|
ディレクトリの場合は下記コマンドになります。
|
|
dオプションを追加するだけです。
各オプションの意味は次の通りです。
1オプション
1オプションを指定すると、1行に1つのファイルを表示するようになります。
こちらを指定しないと横並びになってしまい、次のtailコマンドで処理ができなくなってしまいます。
ちなみにこちらは数字の1になります。英字のlではないので注意してください。
tオプション
tオプションは、更新日時の新しい順(降順)にソートします。
更新日時の古い順(昇順)にソートしたい場合はrオプションを追加して並び順を反転させましょう。
dオプション
dオプションは、ディレクトリの内容ではなくディレクトリ名を一覧表示します。
ディレクトリを対象としたい場合に、dオプションを指定しないとディレクトリの中身のファイルが表示されてしまうため、ディレクトリを削除するつもりが中身のファイルだけ削除されることになってしまいます。
では次にtailコマンドを解説します。
3行目以降を取得するコマンド
tail -n +3
は3行目以降を取得するコマンドです。
|
|
tailコマンドをオプションなしでそのまま実行すると、ファイルの最後の10行を出力するコマンドになります。
nオプションの意味は次の通りです。
nオプション
nオプションを指定すると、nオプションの後に指定した数値によって出力される行数を制御できます。
例えばtail -n 5
の場合はファイルの最後の5行を出力するコマンドになります。
今回のようにn行目以降を取得したい場合は+指定子を使います。
+指定子を数字の前に付けると、ファイル全体からn行目以降という動作に変化します。
今回は3行目以降が欲しいので、+3を指定しています。
xargsについて
最後のxargsについては下記記事で解説していますので、ぜひご一読ください。
linuxのコマンドラインでargument list too longエラーが出た時の対処方法