ishiducaの日記 このページをアンテナに追加 RSSフィード

2009-03-08

[][]Windowsのコマンドプロンプトで「ls」コマンドっぽく表示するためのスクリプトを書いてみた 22:38 Windowsのコマンドプロンプトで「ls」コマンドっぽく表示するためのスクリプトを書いてみた - ishiducaの日記 を含むブックマーク はてなブックマーク - Windowsのコマンドプロンプトで「ls」コマンドっぽく表示するためのスクリプトを書いてみた - ishiducaの日記 Windowsのコマンドプロンプトで「ls」コマンドっぽく表示するためのスクリプトを書いてみた - ishiducaの日記 のブックマークコメント

Perlが使える環境であるのは当然として Stat::lsMode モジュールが必要なのが残念だけど、僕的には需要があるので。

#!/usr/bin/perl -s -wl
# lsperl
use strict;
use Stat::lsMode;

our ($a,$l);
@ARGV == 0 and @ARGV = $a ? <.* *> : <*>;

$,="\n";
print $l ? map { &opt($_) } @ARGV : @ARGV;

exit 0;

sub opt{
    my $filename = shift;
    my ( undef, undef, $mode, $nlink, $uid,
      $gid, undef, $size, undef, $modified ) = stat $filename;
    my $mod     = localtime $modified;
    my $userid  = getpwuid $uid;
    my $groupid = getgrgid $gid;
    my $rwx     = format_mode $mode;
    return sprintf "%s %4d %3s %9s %12d %s %s",
      $rwx, $nlink, $userid, $groupid, $size, $mod, $filename;
}

使い方

1. カレントディレクトリ内のファイルのリストを出力する

> perl lsperl

2. カレントディレクトリ内の隠しファイルを含めたリストを出力する(aスイッチを使います)

> perl lsperl -a

3. 詳細なリストを出力する(lスイッチを使います)

> perl lsperl -l

4. 隠しファイルを含めた詳細なリストを出力する

> perl lsperl -a -l

5. ファイルを指定(もしくは、グロブ)する場合

> perl ls perl *.txt

こんな感じになります

> perl lsperl -a -l
-rw-r--r--    1 ishiduca     staff        12288 Sun Mar  8 22:20:25 2009 .lsperl.swp
-rw-r--r--    1 ishiduca     staff        12288 Tue Dec 23 15:54:41 2008 .our.swp
-rw-r--r--    1 ishiduca     staff        11644 Fri Jan 16 19:44:17 2009 旅費費内訳.ods
-rw-r--r--    1 ishiduca     staff          731 Mon Dec 15 16:53:51 2008 手順書.txt
-rw-r--r--    1 ishiduca     staff          229 Thu Mar  5 16:36:28 2009 0208.txt
-rw-r--r--    1 ishiduca     staff        54526 Sun Mar  1 15:20:15 2009 15477800_500.jpg
-rw-r--r--    1 ishiduca     staff          468 Fri Feb 13 15:51:00 2009 20090213.csv
-rw-r--r--    1 ishiduca     staff         1398 Thu Feb 19 16:06:56 2009 安全管理規程.txt

[]続・Windowsのコマンドプロントには「ls」コマンドがないので、ワンライナーでそれっぽく代用する 22:08 続・Windowsのコマンドプロントには「ls」コマンドがないので、ワンライナーでそれっぽく代用する - ishiducaの日記 を含むブックマーク はてなブックマーク - 続・Windowsのコマンドプロントには「ls」コマンドがないので、ワンライナーでそれっぽく代用する - ishiducaの日記 続・Windowsのコマンドプロントには「ls」コマンドがないので、ワンライナーでそれっぽく代用する - ishiducaの日記 のブックマークコメント

以前にエントリーしたもの一つ前にエントリーしたものでは、同じ結果を表示しているけど、プロセス(というのかな?)がちがうので、その辺を自分用にメモ。

以前のはこう。

1: > perl -w -e 'while(<*>){ print "$_\n"; }'

これは短縮できる

  • "\n" は、起動オプションの "l" で補える
  • "$_" は、省略できる

そんな訳で、短縮版はこれ。

2: > perl -wl -e 'while(<*>){ print; }'

上記の二つは、ファイル名のリストを生成(<*>の部分)-> リストがなくなるまで一つずつ処理(出力)。 というプロセス。これと比べて、下記のものはファイルのリスト(配列)を出力しているだけ。だたし、リスト(配列)の要素と要素の間を区切る文字列にニューライン "\n" を指定しているので、同じように表示されている。

3: > perl -wl -e '$,="\n"; print <*>;'

次のは、ファイル名のリストが配列ということを明示させる例(無意味だけど)

4: > perl -wl -e '$,="\n"; print @ARGV;' *

3 と 4 は特殊変数の "$," を知らないと思いつかないので、"$," と、兄弟的な "$"" についてメモ。

  • "$," はクォートされていないハッシュまたは配列の % または @ 付きの名前(例 print @ARGV)が print の引数リストに指定された時に、要素間に挟まれる文字列
  • print の引数リストの中に現れる(クォートされていない)コンマ(例 'dog','cat')に置き換わる文字列
  • デフォルトで空
  • "$"" は配列の @ 付きの名前がダブルクォートで囲まれた(例 "@ARGV")時に各要素の間に挿入される文字列
  • デフォルトでスペース

何気に "@ARGV" のメモがなかったようなので、ここに

  • プログラムのコマンドライン引数を保持する特殊な配列
  • 入力を自動的に読み込むプログラムラインではファイル名として解釈される

[][][][]Windowsのコマンドプロンプトには「ls」コマンドがないので、ワンライナーでそれっぽく代用する 09:36 Windowsのコマンドプロンプトには「ls」コマンドがないので、ワンライナーでそれっぽく代用する - ishiducaの日記 を含むブックマーク はてなブックマーク - Windowsのコマンドプロンプトには「ls」コマンドがないので、ワンライナーでそれっぽく代用する - ishiducaの日記 Windowsのコマンドプロンプトには「ls」コマンドがないので、ワンライナーでそれっぽく代用する - ishiducaの日記 のブックマークコメント

> perl -wl -e '$,="\n"; print <*>;'

当然、Perlがインストールされていないと意味がない。あと、隠しファイルの場合は「<*>」を「<.*>」にする。「<.* *>」もあり。


追記 2009.03.08

任意の拡張子のファイル(この例だと「.txt」「.pl」)をリストする時には

> perl -wl -e '$,="\n"; print @ARGV;' *.txt *.pl

KipliKipli2012/06/07 10:17Fiindng this post has solved my problem

bqtgebmvrkbqtgebmvrk2012/06/07 20:44tSnpI6 <a href="http://szepiuqnbvdq.com/">szepiuqnbvdq</a>

bgebwyvpcsbgebwyvpcs2012/06/12 03:41QuzFIv <a href="http://bevrhjshdskz.com/">bevrhjshdskz</a>

vqnxgsvqnxgs2012/06/13 09:00uKYnq0 , [url=http://jzoegncuwcdb.com/]jzoegncuwcdb[/url], [link=http://jtzcwsjlubwn.com/]jtzcwsjlubwn[/link], http://irrladcrhhgr.com/

トラックバック - http://perl.g.hatena.ne.jp/ishiduca/20090308