LoginSignup
0
0

Ruby芸160チャレンジ(#21)再帰探査&ディレクトリを含めない

Posted at

この記事は何

shellgei160を通じて言語習得 Advent Calendar 2023に参加しています。

書籍「シェル芸ワンライナー160本ノック」の例題をRubyで解いてみて、Rubyの学習に役立てようとするものです。

例題はこちらのリポジトリで公開されているものに限ります。
https://github.com/shellgei/shellgei160

実行環境など

  • Docker image: ruby:3.0.2
  • 上記リポジトリをクローンした上で、リポジトリのルートディレクトリ直下にanswer-rubyディレクトリを作り、その中に解答となるファイルを作成していきます。

今回のテーマ

$ find -type f | grep -v "\./dir_b/d" | sort

指定したフォルダ内を再帰的に探査し、ディレクトリは含めず、./dir_b/dというパターンにマッチしないファイルだけを一覧にする処理です。

target = 'qdata/21'
exclude = File.join(target, 'dir_b/d')

# 再帰探索のために**/*を使う
puts Dir.glob("#{target}/**/*").reject { |f| File.directory?(f) || f.match(exclude) }.sort

所感

  • 再帰探査には/**/*を使う
  • ディレクトリかどうかはFile.directory?でOK
  • 条件に当てはまらない場合、にはrejectが読みやすくて良いね
0
0
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
0
0