2013年1月2日水曜日

開発環境

『初めてのPerl 第6版』(Randal L. Schwartz, Tom Phoenix, brian d foy 共著、近藤 嘉雪 訳、オライリー・ジャパン、2012年、ISBN978-4-87311-567-2) の13章(ディレクトリ操作)、13.13(練習問題)7を解いてみる。

その他参考書籍

7.

コード(BBEdit)

sample.pl

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use 5.016;
binmode STDIN, ':utf8';
binmode STDOUT, ':utf8';
use File::Basename;
use File::Spec;

my $s = $ARGV[0] eq '-s';
shift @ARGV if $s;
my($old_name, $new_name) = @ARGV;
die $! unless -f $old_name;
if(-d $new_name){
  my $basename = basename $old_name;
  $new_name = File::Spec->catfile($new_name, $basename);
}
if($s){
  symlink $old_name, $new_name or
    die "can't symlink $old_name to $new_name:$!";
} else {
  link $old_name, $new_name or 
    die "can't link $old_name to $new_name:$!";
}

入出力結果(Terminal)

$ ls -l symlink*
-rw-r--r--  3 kamimura  staff  8  1  2 23:25 symlink.txt
$ ./sample.pl symlink.txt symlink1.txt
$ ls -l symlink*
-rw-r--r--  4 kamimura  staff  8  1  2 23:25 symlink.txt
-rw-r--r--  4 kamimura  staff  8  1  2 23:25 symlink1.txt
$ ./sample.pl -s symlink.txt symlink2.txt
$ ls -l symlink*
-rw-r--r--  4 kamimura  staff   8  1  2 23:25 symlink.txt
-rw-r--r--  4 kamimura  staff   8  1  2 23:25 symlink1.txt
lrwxr-xr-x  1 kamimura  staff  11  1  2 23:34 symlink2.txt -> symlink.txt
$ ./sample.pl -s symlink1.txt some_folder
$ ls -l some_folder/*
-rw-r--r--  3 kamimura  staff    3  1  1 16:58 some_folder/ln.txt
-rw-r--r--  1 kamimura  staff    3 12 31 13:45 some_folder/mv1.txt
-rwxr-xr-x@ 1 kamimura  staff  477  9 28 15:58 some_folder/sample.pl
-r--r--r--  2 kamimura  staff   28  9 27 14:38 some_folder/some_file
-r--r--r--  2 kamimura  staff   28  9 27 14:38 some_folder/some_file1
lrwxr-xr-x  1 kamimura  staff    9  9 28 16:00 some_folder/some_file2 -> some_file
lrwxr-xr-x  1 kamimura  staff   12  1  2 23:35 some_folder/symlink1.txt -> symlink1.txt
$

pythonの場合。

sample.py

コード(BBEdit)

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

import os, sys

s = ""
if sys.argv[1] == '-s':
    s = True
    src, dest = sys.argv[2], sys.argv[3]
else:
    src, dest = sys.argv[1], sys.argv[2]

if os.path.isdir(dest):
    dest = os.path.abspath(dest) + os.path.sep + src

if s:
    os.symlink(src, dest)
else:
    os.link(src, dest)    

入出力結果(Terminal)

$ ls -l symlink*
-rw-r--r--  3 kamimura  staff  8  1  2 23:25 symlink.txt
$ ./sample.py symlink.txt symlink1.txt
$ ls -l symlink*
-rw-r--r--  4 kamimura  staff  8  1  2 23:25 symlink.txt
-rw-r--r--  4 kamimura  staff  8  1  2 23:25 symlink1.txt
$ ./sample.py -s symlink.txt symlink2.txt
$ ls -l symlink*
-rw-r--r--  4 kamimura  staff   8  1  2 23:25 symlink.txt
-rw-r--r--  4 kamimura  staff   8  1  2 23:25 symlink1.txt
lrwxr-xr-x  1 kamimura  staff  11  1  2 23:41 symlink2.txt -> symlink.txt
$ ./sample.py -s symlink.txt some_folder
$ ls -l some_folder/symlink*
lrwxr-xr-x  1 kamimura  staff  11  1  2 23:41 some_folder/symlink.txt -> symlink.txt
$

0 コメント:

コメントを投稿