Perlでシェルスクリプトっぽい操作をしたい
適宜更新.
パス操作に関しては File::Spec を使うといいらしい。
Cwd も結構使える。
- OSに依存しないファイル名を作成する - File::Spec->catfile() - サンプルコードによるPerl入門 〜 伝統と信頼のPerlを学ぼう 〜
- File::Spec - ファイル名に移植性を - あじゃぱー
Cwd 'abs_path': パスから絶対パスを得る
与えられたパスがシンボリックリンクだったとき、実体を取得する。
use Cwd 'abs_path'; my $entity = abs_path('/home/gologo13/hoge/../');
readlink: シンボリックリンクの実体を参照する
readlink
File::Spec->catfile: 環境に依らないファイルパスの結合
#!perl use File::Spec; $path = File::Spec->catfile( 'a', 'b', 'c' ); #$pathはWindowsでは a¥b¥c # Unix, Linuxでは a/b/c use File::Spec::Functions; $path = catfile('a', 'b', 'c');
File::Copy 'move': mvコマンド
use File::Copy; $foo = '/home/yokota/hoge.txt'; $bar = '/tmp/hoge.txt'; move $foo, $bar or die $!;
File::Spec->rel2abs: 相対パスから絶対パスを得る
use File::Spec; $path = q(../tmp.txt); $base = q(/aaa/bbb); print File::Spec->rel2abs($path, $base); # /aaa/tmp.txt
$baseがない場合cwd()が使われる。
glob: ディレクトリ内のファイル一覧
my @files = glob("*");
みたいな感じでディレクトリ内のファイル一覧がとれる.