Skip to content

Instantly share code, notes, and snippets.

@c18t
Created October 20, 2012 10:29
Show Gist options
  • Save c18t/3922913 to your computer and use it in GitHub Desktop.
Save c18t/3922913 to your computer and use it in GitHub Desktop.
Usage: # perl filetest.pl filetest.pl
#!/usr/local/bin/perl
my %X = (
-r => 'File is readable by effective uid/gid.',
-w => 'File is writable by effective uid/gid.',
-x => 'File is executable by effective uid/gid.',
-o => 'File is owned by effective uid.',
-R => 'File is readable by real uid/gid.',
-W => 'File is writable by real uid/gid.',
-X => 'File is executable by real uid/gid.',
-O => 'File is owned by real uid.',
-e => 'File exists.',
-z => 'File has zero size (is empty).',
-s => 'File has nonzero size (returns size in bytes).',
-f => 'File is a plain file.',
-d => 'File is a directory.',
-l => 'File is a symbolic link.',
-p => 'File is a named pipe (FIFO), or Filehandle is a pipe.',
-S => 'File is a socket.',
-b => 'File is a block special file.',
-c => 'File is a character special file.',
-t => 'Filehandle is opened to a tty.',
-u => 'File has setuid bit set.',
-g => 'File has setgid bit set.',
-k => 'File has sticky bit set.',
-T => 'File is an ASCII text file (heuristic guess).',
-B => 'File is a "binary" file (opposite of -T).',
-M => 'Script start time minus file modification time, in days.',
-A => 'Same for access time.',
-C => 'Same for inode change time (Unix, may differ for other platforms)',
);
for my $file (@ARGV) {
for my $X (qw/-r -w -x -o -R -W -X -O -e -z -s -f -d -l -p -S -b -c -t -u -g -k -T -B -M -A -C/) {
print qq|$X $file == @{[eval "$X '$file'" or 0]}: $X{$X}\n|;
}
}
1;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment