Nodachisoft Nodachi Sword Icon
  
@あまじ✎ 2021年8月12日に更新

Linuxで特定のファイル以外を削除する方法

概要

Linux のシェルを利用しているとき、特定のファイル以外を削除するコマンドを備忘しました。

grep コマンドや find コマンド、xargs コマンドを組み合わせて実現しています。

特定のフォルダやファイル以外を削除

find コマンドで、カレントディレクトリ配下のフルパスを一覧表示できます。

これと、grep や xargs コマンドを組合せることで、削除したいファイルやフォルダを絞ることができます。

YYYYMMDD 形式のフォルダやファイルで最新以外を削除

フォルダ配下に以下のような大量のフォルダがあり、最新のフォルダ以外は削除したい場合のコマンドです。 (ハイライトしたフォルダが、削除したい対象です)

一覧表示
> ls
test.txt
aaa.txt
deploy_nodachisoftwww_20210809_170621deploy_nodachisoftwww_20210810_003958deploy_nodachisoftwww_20210810_073123deploy_nodachisoftwww_20210811_113820
config

ここで、「deploy_nodachisoftwww_YYYYMMDD_HHMMSS」形式のフォルダについて、 最新のもの以外を削除したいとします。

コマンドは以下のようになります。

コマンド
> find `pwd`/deploy_*  -maxdepth 0 | sort | head -n -1 | xargs rm -rf

実行すると下のように対象のフォルダだけ削除されています。

一覧表示(結果確認)
> ls
test.txt
aaa.txt
deploy_nodachisoftwww_20210811_113820
config

動きの解説

複数のコマンドをパイプ(|)でつなげて実現しています。それぞれ実施している内容は下のようになっています。

  1. カレントディレクトリにある「deploy_」に該当するファイル・フォルダをフルパスで一覧で出力(find \pwd`/deploy_ -maxdepth 0`)
  2. 昇順でソート(sort
  3. ソートされた一覧から、最後の行を対象外に(head -n -1
  4. 各行をパイプで受け取り、削除(xargs rm -rf

2世代前までを残したい

YYYYMMDD をファイル名、フォルダ名に含むとき、2世代前まで残してあとは削除する場合は下のようなコマンドで対応できます。

コマンド
> find `pwd`/deploy_*  -maxdepth 0 | sort | head -n -2 | xargs rm -rf

head -n -2 とし、2世代ぶん(2行分)を対象から除いています。

フォルダの中から合致するファイルのみ、削除

たとえば、対象フォルダ配下に含まれる keshiteyo_1.txt、keshiteyo_2.txt、keshiteyo_3.txt などの、 「keshiteyo_*.txt」を削除したい時、以下で対応できます。

コマンド
> find /対象フォルダのパス/ -type f -name keshiteyo_*.txt | xargs rm

免責事項

rm コマンドでの削除は、ミスすると非常に危険で取り返しがつかないことがあるため、 実行するときはご自身で事前に確認して実行してください。 (もちろん筆者は責任とれませんので)

参考

変更履歴

  • なし
 
 
送信しました!

コメント、ありがとうございます。

なんかエラーでした

ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。

Twitter:@NodachiSoft_jp
お名前:
 
連絡先:
 
メッセージ:
 
戻る
内容の確認!

以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください

お名前:
 
連絡先:
 
メッセージ:
 
Roboto からの操作ではないという確認のため確認キーを入れてください。
確認キー=95
戻る
 / 
送信確認へ
コメント欄
コメント送信確認へ

目次
Linuxで特定のファイル以外を削除する方法
Linuxで特定のファイル以外を削除する方法
概要
概要
特定のフォルダやファイル以外を削除
特定のフォルダやファイル以外を削除
YYYYMMDD 形式のフォルダやファイルで最新以外を削除
YYYYMMDD 形式のフォルダやファイルで最新以外を削除
動きの解説
動きの解説
2世代前までを残したい
2世代前までを残したい
フォルダの中から合致するファイルのみ、削除
フォルダの中から合致するファイルのみ、削除
免責事項
免責事項
参考
参考
変更履歴
変更履歴
Nodachisoft © 2021