#!/usr/bin/perl -w
#
# pfile for Safari
# Copyright (c) 1999 by Barrie Slaymaker, rbs@telerama.com
#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the README file.
#
use strict ;
use Getopt::Long ;
use File::Type qw( add_mime_types get_type type_2_mime ) ;
my %options ;
GetOptions(
\%options,
'debug|d+',
'types|type=s@',
'tests|tests=i@',
'mime-file=s',
'fields=s',
'follow!',
) ;
if ( defined( $options{'mime-file'} ) ) {
add_mime_types( $options{'mime-file'} ) ;
}
my $max_name_length = 0 ;
my $max_type_length = 0 ;
my %types ;
@ARGV = ( '-' ) unless @ARGV ;
for ( @ARGV ) {
if ( $_ eq '-' ) {
$/ = undef ;
$_ = 'stdin' ;
$types{$_} = get_type( \%options, undef, <STDIN> ) ;
}
else {
$types{$_} = get_type( \%options, $_ ) ;
}
$max_name_length = length( $_ )
if length( $_ ) > $max_name_length ;
$max_type_length = length( $types{$_} )
if length( $types{$_} ) > $max_type_length ;
}
my $print_file = 1 ;
my $print_type = 1 ;
my $print_mime = 1 ;
if ( defined( $options{'fields'} ) ) {
for ( $options{'fields'} ) {
$print_file = m/\bfile\b/ ;
$print_type = m/\btype\b/ ;
$print_mime = m/\bmime\b/ ;
}
}
++$max_name_length ;
for ( sort keys %types ) {
my $type = $types{$_} ;
my $mime_type = type_2_mime( $type ) ;
my @output ;
push( @output, sprintf( "%-${max_name_length}s", "$_:" ) ) if $print_file ;
push( @output, sprintf( "%-${max_type_length}s", $type ) ) if $print_type ;
push( @output, sprintf( "%s", $mime_type ) )
if $print_mime && defined $mime_type ;
print( join( ' ', @output ), "\n" ) ;
}
0 ;
| # | Change | User | Description | Committed | |
|---|---|---|---|---|---|
| #5 | 190 | Barrie Slaymaker | Tweaked stdin feature to not break supplying a file name | ||
| #4 | 185 | Barrie Slaymaker |
Allowed input to come from stdin if not file names given. Fixed bug in File::Type that made it return directory all if the option 'follow' was passed and the last -X file test was on a directory. |
||
| #3 | 168 | Barrie Slaymaker | Added YAPC paper, slides | ||
| #2 | 165 | Barrie Slaymaker | Applied Greg KH's license patch. | ||
| #1 | 162 | Barrie Slaymaker | First code & documentation checkin |