in reply to Re^2: Creating a bash script "on the fly"
in thread Creating a bash script "on the fly"
I have bunch of paths. How do I know for example if there is a link in the path?
You won't know from just looking at the string. You'll have to check the filesystem, and for each pathname break it down into its components, using e.g. -l on each one. You can break down a filename using e.g. splitdir from File::Spec, or IMO a little easier, Path::Class. Maybe something like:
use warnings; use strict; use Path::Class qw/file dir/; my $file = file('/tmp/foolink/bar/quz'); my $prev; while (1) { die "doesn't exist: $file" unless -e $file; print $file, " is a ", -l $file ? 'link to '.readlink($file) : -f $file ? 'file' : -d _ ? 'dir' : 'special', "\n"; $prev = $file; $file = $file->parent; last if $prev eq $file; } __END__ /tmp/foolink/bar/quz is a file /tmp/foolink/bar is a dir /tmp/foolink is a link to foo /tmp is a dir / is a dir
Update: Added a check to the above code to make sure the file exists in the first place.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Creating a bash script "on the fly"
by ovedpo15 (Pilgrim) on Mar 27, 2021 at 11:11 UTC | |
by haukex (Archbishop) on Mar 27, 2021 at 11:19 UTC |