Giter Club home page Giter Club logo

file-find's Introduction

Ruby

Description

This is a drop-in replacement for the find module currently in the standard library. It is modeled on a typical 'find' command found on most Unix systems.

Installation

gem install file-find

Adding the trusted cert

gem cert --add <(curl -Ls https://raw.githubusercontent.com/djberg96/file-find/main/certs/djberg96_pub.pem)

Synopsis

  require 'file/find' # 'file-find' also works

  rule = File::Find.new(
    :pattern => "*.rb",
    :follow  => false,
    :path    => ['/usr/local/lib', '/opt/local/lib']
  )

  rule.find{ |f|
    puts f
  }

Rationale

The current find module in the standard library is inadequate. It is, quite frankly, not much more than a plain Dir.glob call. This library provides an interface based on options typically available on your command line 'find' command, thus allowing you much greater control over how you find your files.

Options

  • atime
  • ctime
  • follow
  • ftype
  • inum
  • group (name or id)
  • maxdepth
  • mindepth
  • mount
  • mtime
  • name (or 'pattern')
  • path
  • perm
  • prune
  • size
  • user (name or id)

In addition to the above options, FileTest methods such as readable? and writable? may be used as keys, with true or false for their values.

See the documentation for more details about these options.

Future Plans

None at this time. Please log any feature requests on the project page at:

http://github.com/djberg96/file-find

Options I won't support

Generally speaking, anything that would require mucking around with C code or is just too difficult to implement in a cross platform manner will not be supported. These include the following options:

  • acl/xattr - Way too difficult to implement in a cross platform manner, and a rarely used option in practice.

  • cpio/ncpio - I will not shell out to this or any other 3rd party application.

  • ls/print - Use Ruby's builtin printing methods to print as you see fit.

  • ok - This is not interactive software.

Known Issues

The :perm option is limited to 0644 and 0444 on MS Windows.

The :user, :group, and :inum options require the win32-file gem to work properly on MS Windows. However, win32-file is not officially a dependency.

Bugs

None that I'm aware of beyond the ones mentioned in the Known Issues. Please log any bug reports on the project page at:

http://github.com/djberg96/file-find

Acknowledgements

  • Richard Clamp's File::Find::Rule Perl module for additional ideas and inspiration.
  • Bill Kleb for ideas regarding name, group and perm enhancements.
  • Hal Fulton for his implementation of symbolic permissions.

License

Apache-2.0

Copyright

(C) 2007-2021, Daniel J. Berger, All Rights Reserved

Author

Daniel J. Berger

file-find's People

Contributors

djberg96 avatar jlawler avatar joast avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

file-find's Issues

undefined method `directory?' error when scanning directory

I was testing out file-find in irb, and ran into an error when trying to scan a set of directories.

Based on the example you gave, I did the following:

rule = File::Find.new( :pattern => "*.mov", :follow => false, :path => "/Users/mistydemeo/Desktop" )

Then I tried to run

rule.find{ |f| puts f }

After printing a number of files, it halted with the following error:

NoMethodError: undefined method directory?' for nil:NilClass from /Users/mistydemeo/.rvm/gems/ruby-1.9.2-p180/gems/file-find-0.3.4/lib/file/find.rb:297:inblock (2 levels) in find'
from /Users/mistydemeo/.rvm/gems/ruby-1.9.2-p180/gems/file-find-0.3.4/lib/file/find.rb:229:in foreach' from /Users/mistydemeo/.rvm/gems/ruby-1.9.2-p180/gems/file-find-0.3.4/lib/file/find.rb:229:inblock in find'
from /Users/mistydemeo/.rvm/gems/ruby-1.9.2-p180/gems/file-find-0.3.4/lib/file/find.rb:227:in each' from /Users/mistydemeo/.rvm/gems/ruby-1.9.2-p180/gems/file-find-0.3.4/lib/file/find.rb:227:infind'
from (irb):34
from /Users/mistydemeo/.rvm/rubies/ruby-1.9.2-p180/bin/irb:16:in `

'

This occurs with both 1.8.7 and 1.9.2, as installed by RVM. The version of file-find came from Rubygems.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.