0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ある条件のファイルに対して処理を行う

Last updated at Posted at 2019-01-24

何がしたいか

ファイル名、ディレクトリ名にある文字を含むファイルすべてを削除する必要がありました。ファイルがたくさんあるので手作業では無理だったのでシェルで削除しようと試みました。

条件

  • ファイル名に"hoge"が含まれていないこと
  • カレントディレクトリ以下のディレクトリ名に"hoge"が含まれていないこと
  • ファイルのみが削除対象
  • ファイル名に半角スペースが含まれている

試したこと

まずはfindとgrepを使って、"hoge"が含まれないファイルのフルパス一覧を取得します。

find * \! -type d | grep -v "hoge"

  • ディレクトリ以外を指定
  • grepで"hoge"を含まない行のみを選択

次に、xargsでrmコマンドを動かします。これで消したいファイルを一気に削除することができました。

find * \! -type d | grep -v "hoge" | xargs -d \\n rm

ファイル名に半角スペースが含まれるため、オプションなしでは1つのファイルを2つのファイルをして認識してしまいます。したがって、受け取る文字列の区切り文字を-dオプションで明示的に指定します。

ファイル名指定であれば以下でも条件を満たすことができると思いますが、今回は【カレントディレクトリ以下のディレクトリ名に"hoge"が含まれていないこと】が条件にあるので、grepを使いました。

find * \! -type d -name "*hoge*" print0 | xargs -0 rm

[2019/01/26 追記]
angel_p_57さんにコメントをいただき、内容を大きく修正しました。
元々は、ディレクトリもまとめてrmコマンドに突っ込んでいたため、エラー前提で実行していましたが、やはり余計なものは取り除いた方がスマートでした。
ありがとうございます。

0
0
2

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?