Perlでシェルスクリプトっぽい操作をしたい

適宜更新.
パス操作に関しては File::Spec を使うといいらしい。
Cwd も結構使える。

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("*");

みたいな感じでディレクトリ内のファイル一覧がとれる.

ファイル検査演算子

比較的使いそうなのをコピペ。

  • r 読み込み可能であれば
  • w 書き込み可能であれば
  • x 実行可能であれば
  • e ファイルが存在すれば
  • z ファイルサイズが0であれば
  • s サイズが0でなければ
  • f 通常ファイルであれば
  • d ディレクトリであれば
  • l シンボリックリンクであれば

クロスプラットフォームなファイル・ディレクトリパスの操作

良さげ。