LoginSignup
3
1

More than 5 years have passed since last update.

Rails プロジェクトに存在する不要な .keep ファイルを削除する

Last updated at Posted at 2019-01-28

やりたいこと

.keep ファイルのうち同じディレクトリに Git で管理されているファイルが存在するものは要らないので消したい。

方法

次の .keep ファイルは残しておきます。

  • Git で無視されているディレクトリに存在する .keep ファイル
  • .keep ファイルと同じディレクトリに存在するファイルが全て Git で無視されている場合
    • 例えば log/.keep など。
git_ignored_filepaths =
  `git status --ignored -s`
    .split("\n")
    .map { |ignored| Rails.root.join(ignored[/(?<=!! ).+/]) }

Rails.root
  .glob('**/.keep')
  .select { |path| (path.dirname.children - git_ignored_filepaths).many? }
  .reject { |path| git_ignored_filepaths.any? { |ignored| ignored.directory? && path.fnmatch?(ignored.join('**').to_s) } }
  .map { |path| path.tap(&:delete) }

なお Ruby 2.5 より前のバージョンでは Pathname#glob が使えないので、次のように書き換えてください。

# Rails.root.glob('**/.keep') の部分を次の行に書き換える。
Dir[Rails.root.join('**/.keep')].map { |path| Pathname(path) }

🔽 コピペ用

git_ignored_filepaths = `git status --ignored -s`.split("\n").map { |ignored| Rails.root.join(ignored[/(?<=!! ).+/]) }
Rails.root.glob('**/.keep').select { |path| (path.dirname.children - git_ignored_filepaths).many? }.reject { |path| git_ignored_filepaths.any? { |ignored| ignored.directory? && path.fnmatch?(ignored.join('**').to_s) } }.map { |path| path.tap(&:delete) }
3
1
0

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
3
1