LoginSignup
2
2

More than 5 years have passed since last update.

コマンド上で「指定した1ファイル以外全消し」を実現するエイリアス

Last updated at Posted at 2018-01-12

前書き

作業中に「指定した1ファイル以外全消し」をする機会が多くて、コマンド1発で実現したかった。

ググればいっぱい出てくるんだけれど、
「隠しファイル・隠しフォルダに対応してない」
「ファイル名が同じならパスが違っても生き残る」
「強引でちょっと怖い
などなどで、思う通りの挙動をするものが無かったので作りました。1

※ファイル削除が絡むので、利用は慎重に、自己責任でお願いします。

コマンド内容

下記を .bashrc に追記。

.bashrc
function rm-without() {
  # 第1引数で指定したパス&ファイル名のモノ以外のファイル削除(完全一致)
  find . -type f | sed 's/^\.\///' | grep -v "^$1$" | xargs rm -f
  # 空になったディレクトリ削除
  find . -type d -empty -delete
}
使い方
# source ~/.bashrc を忘れないでね!
$ rm-without sftp-config.json 

解説

  1. find . -type f で現在のディレクトリ以下のファイルを列挙。
  2. 行頭に ./ がつくので、置換処理( sed 's/^\.\///' )で排除。
    • 引数と同じ名前形式にしたかった。
  3. grep -v "^$1$" で第1引数に完全一致するもの以外を抽出。
  4. xargs rm -f で削除。
  5. find . -type d -empty -delete で空のディレクトリを削除(便利!)
    • rmdirだと警告出る可能性があったので使わない方向にした。

あとがき

ごくごく細部のことですが、ググってもいいのが見つからなかったので…。
「1つ1つの処理フローの意図を明確に」をモットーに書いた。

参考文献

目的のファイル以外を削除するコマンド - びぶろく
bashで複数コマンドのエイリアス - Qiita
sedコマンドの備忘録 - Qiita
空のディレクトリを再帰的に消す - システム開発メモ


  1. bash 使いなので、 bash でしか動作確認していないですが、そんな変なことしていないので、多分 zsh でも動くんじゃないかなーと思っています。 

2
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2