Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Rubyでディレクトリを操作する方法

Rubyでファイルシステムをナビゲートできることをご存知ですか?

Rubyの「Dir」クラスを使用します。

ディレクトリエントリを一覧表示したり、現在のディレクトリを変更したり、新しいフォルダを作成したりすることもできます!

ここに例があります

filenames = Dir.entries(".")

このentries メソッドは、ファイル名エントリの配列を返します。すべてのエントリは文字列であるため、これらのファイルを実際に読み取る場合は、これをRubyFileクラスと組み合わせる必要があります。

ところで、このドット(. )は現在のディレクトリを表します 。

これは、コードを実行しているときの(ターミナル内の)ディレクトリではなく、コードを実行しているディレクトリになります。

そのため…

Dir.pwdを使用して、現在のディレクトリを確認すると便利な場合があります メソッド。

Dirの使い方を学びましょう 新しいディレクトリを作成するクラス(mkdir )、名前を変更します(mv )、特定のパターンに従うファイル名を検索します(glob

RubyのMkdirメソッドを使用して新しいディレクトリを作成する

Rubyで新しいフォルダーを作成する場合は、Dir.mkdirを使用できます。 メソッド。

Dir.mkdir("testing")

相対パスが指定されている場合、このディレクトリは現在のパス(Dir.pwd)の下に作成されます 。

いくつかのエラーが発生する可能性があります

  • ディレクトリはすでに存在します(Errno::EEXIST
  • 許可が拒否されました(Errno::EACCES
  • まだ存在していない別のフォルダの下にフォルダを作成しようとしています(Errno::ENOENT

最後のエラーは通常、ネストされたディレクトリを作成しようとしたときに発生します。

または、存在しない絶対パスを使用している場合。

2つのソリューション

  • ディレクトリを作成する前に、ディレクトリが存在するかどうかを確認してください(Dir.exists?を使用) )
  • より高度なクラスを使用する(次のセクション)

学び続けましょう!

FileUtilsモジュールを使用した高度な操作

追加の馬力が必要な場合は、FileUtilsを導入できます。 標準ライブラリのモジュール。

mkdir_pのようなメソッドが含まれています ネストされたディレクトリを1つのステップで作成します。

ここに例があります

require 'fileutils'

FileUtils.mkdir_p("/tmp/testing/a/b")

かなりかっこいいですよね?

それだけではありません、FileUtils また、キーワード引数の形式ですべてのファイル操作に追加のオプションを提供します。 verboseのように オプション(Linuxコマンドを出力)とnoop (ファイルを変更しないでください)オプション。

試してみてください!

ディレクトリの名前を変更する方法

Rubyを使用すると、オペレーティングシステムのユーザーインターフェイスまたは端末から実行できるすべての操作を実行できます。

例…

このようにディレクトリの名前を変更できます

FileUtils.mv("/tmp/a", "/tmp/b")

FileUtilsも使用する必要があります ここではmv Dirでは利用できません クラス。

現在のディレクトリを変更する方法

すべてのディレクトリ操作は現在のディレクトリから実行されるため、変更することをお勧めします。

Dir.chdirを使用できます これを行う方法。

Dir.chdir("/tmp") { Dir.entries(".") }

これは2つの方法で機能します

  • ブロックを使用すると、現在のディレクトリはブロック内のコードに対してのみ変更されます
  • ブロックがないと、メソッド呼び出し後にすべてのコードが変更されます

chdirに注意してください Rubyプロセス内でのみ機能し、「外の世界」には影響しません。

言い換えれば…

Rubyプログラムの実行が停止した後、シェルの作業ディレクトリは変更されません。

パターンマッチングを使用したファイルとディレクトリの一覧表示

フォルダ内のすべてのRubyファイルを検索したいですか? globを使用した簡単なタスク メソッド!

Dir.glob("*.rb")

「.txt」や「.yml」など、他の任意の拡張子を使用できます。または、ファイル名の一部であるその他のテキスト。

すべてのフォルダ内のファイルを検索しますか?

はい、可能です:

Dir.glob("**/*.rb")

結果は、相対パスを含むすべてのファイル名を含む配列になります。 File.basenameを使用すると、パスを削除してファイル名のみを取得できます。 globから取得するリストのすべてのファイルのメソッド 。

概要

Dirを使用してRubyでディレクトリを操作する方法を学習しました &FileUtils クラス。

今度はこれを実践する番です。

読んでくれてありがとう! 🙂


  1. Ruby 2.6のMJITとは何ですか?どのように機能しますか?

    Rubyのパフォーマンスはバージョンごとに大幅に向上しており、Ruby開発チームはRubyをさらに高速化するためにあらゆる努力をしています! これらの取り組みの1つは、3×3プロジェクトです。 目標は? Ruby3.0はRuby2.0の3倍高速になります 。 このプロジェクトの一部は、この記事のトピックである新しいMJITコンパイラです。 MJITの説明 MJITは「メソッドベースのジャストインタイムコンパイラ」の略です。 それはどういう意味ですか? RubyはコードをYARV命令にコンパイルします 、これらの命令はRuby仮想マシンによって実行されます。 JITはこれに別のレ

  2. Rubyでパーサーを構築する方法

    構文解析は、一連の文字列を理解し、それらを理解できるものに変換する技術です。正規表現を使用することもできますが、必ずしもその仕事に適しているとは限りません。 たとえば、HTMLを正規表現で解析することはおそらく良い考えではないことは一般的な知識です。 Rubyには、この作業を実行できるnokogiriがありますが、独自のパーサーを作成することで多くのことを学ぶことができます。始めましょう! Rubyでの解析 パーサーの中核はStringScannerです クラス。 このクラスは、文字列のコピーと位置ポインタを保持します。ポインタを使用すると、特定のトークンを検索するために文字列をトラバ