Sponsored Content
Top Forums Shell Programming and Scripting glob not matching all files in perl Post 302608547 by odyssey on Saturday 17th of March 2012 10:43:18 PM
Old 03-17-2012
glob not matching all files in perl

I encountered a weird issue with globbing in perl not returning all files, while I was testing out a script for recursive dir-processing on my Synology NAS.

Basically it didn't show (/match?) all the files in a specific directory. If I move the file to a different directory or even rename it, it STILL doesn't show, as if something is wrong with the file.

If I copy the file to a new file, neigher of the files are showing.

I can pipe more data into the file and touch it - It doesn't make a difference until I create a new file (e.g. pipe new data into it, thus overwriting it):

Code:
/volume1/share/script # ls -l /volume1/share/testdir/
-rwxrwxrwx    1 admin    users            0 Mar 18 02:33 testfile1
-rwxrwxrwx    1 admin    users    7659671691 Mar 18 03:05 testfile2
 
 
/volume1/share/script # perl -e 'foreach (</volume1/share/testdir/*>) { print $_,"\n"; }'
/volume1/share/testdir/testfile1
 
 
/volume1/share/script # touch /volume1/share/testdir/testfile2
 
 
/volume1/share/script # perl -e 'foreach (</volume1/share/testdir/*>) { print $_,"\n"; }'
/volume1/share/testdir/testfile1
 
 
/volume1/share/script # echo "more data" >> /volume1/share/testdir/testfile2
 
 
/volume1/share/script # perl -e 'foreach (</volume1/share/testdir/*>) { print $_,"\n"; }'
/volume1/share/testdir/testfile1
 
 
/volume1/share/script # echo "new data" > /volume1/share/testdir/testfile2  
 
 
/volume1/share/script # perl -e 'foreach (</volume1/share/testdir/*>) { print $_,"\n"; }'
/volume1/share/testdir/testfile1
/volume1/share/testdir/testfile2

This has caused some serious headscratching... The closest thing I got while googling, was someone claiming that glob is heavily buggy.

I'm open to alternatives, but I hope they are not too different, since I've already made a pretty huge script based on the browse-function. I guess I could simply call the 'ls' command itself, but it would be nice to have something more perl-native.

Since I can't post URL's yet, I'll paste the browse script here (for good measure):
Code:
sub browse($);

sub browse($)
{
    my $path = $_[0];

    if($path !~ /\/$/)
    { $path .= '/'; }

    for my $eachFile (glob($path.'*'))
    {

        if(-d $eachFile)
        { browse($eachFile); }
        else
        { print "$eachFile\n"; }
    }
}

browse("/volume1/share/testdir/");


Last edited by odyssey; 03-17-2012 at 11:51 PM..
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Perl IO vs GLOB symbols

Hi, Can someone please clarify how we are able to use both IO and GLOB symbols of a package variable interchangeably? Please consider the following code: open(FH,"myfile") || die "Unable to open file myfile:$@"; my $glob_var = *main::FH{GLOB}; my $io_var = *main::FH{IO}; print $glob_var... (0 Replies)
Discussion started by: srinivasan_85
0 Replies

2. Programming

How to find the matching data b/w 2 files in perl?

Hi friends,, i have find the matching data between 2files. My file1 have a data like rs3001336 rs3984736 rs2840532 File2 have a data like rs3736330 1 2359237 A G 0.28 1.099 0.010 rs2840532 1 2359977 G A 0.363 0.3373 1.123 rs3001336 1 2365193 G A 0.0812 0.07319 1.12 ... (1 Reply)
Discussion started by: sureshraj
1 Replies

3. Shell Programming and Scripting

How to find the matching data b/w 2 files in perl?

Hi friends,, i have find the matching data between 2files. My file1 have a data like rs3001336 rs3984736 rs2840532 File2 have a data like rs3736330 1 2359237 A G 0.28 1.099 0.010 rs2840532 1 2359977 G A 0.363 0.3373 1.123 rs3001336 1 ... (4 Replies)
Discussion started by: sureshraj
4 Replies

4. Shell Programming and Scripting

Hidden Characters in Regular Expression Matching Perl - Perl Newbie

I am completely new to perl programming. My father is helping me learn said programming language. However, I am stuck on one of the assignments he has given me, and I can't find very much help with it via google, either because I have a tiny attention span, or because I can be very very dense. ... (4 Replies)
Discussion started by: kittyluva2
4 Replies

5. Shell Programming and Scripting

Need to extract only decimal numbers for a glob of text

If you have a look at this thread, you'll see that users have been posting the output a script which are numbers that range from 2 to 5 decimal places. If I dump this entire thread to txt file, how can I: 1) Delete everything except for numbers of the following formats (where 'x' is a digit and... (5 Replies)
Discussion started by: graysky
5 Replies

6. Shell Programming and Scripting

Python - glob () - How to grep same files with different extension files

Hi I Have a directory and i have some files below abc.txt abc.gif gtee.txt ghod.pid umni.log unmi.tar How can use glob function to grep abc files , i have created a variable "text" and i assigned value as "abc", please suggest me how can we use glob.glob( ) to get the output as below... (2 Replies)
Discussion started by: kumar85shiv
2 Replies

7. Shell Programming and Scripting

Using glob() in python script in Linux

Hi I need some suggestion on glob function. I am trying to write a python program to grep some specific files in a particular directory. In the directory i have some files like below abc.log abc.pid abc.tar gadd.tar gat.log gat.tar in this directory i need to grep onlu my hostname files,... (1 Reply)
Discussion started by: kumar85shiv
1 Replies

8. Shell Programming and Scripting

Perl - Use of *? in Matching Pattern

I am using Perl version 5.8.4 and trying to understand the use of regular expression. Following is my code and output. $string = "Perl is a\nScripting language"; ($start) = ($string =~ /\A(.*?) /); @lines = ($string =~ /^(.*?) /gm); print "First Word (using \\A): $start\n","Line... (4 Replies)
Discussion started by: jnrohit2k
4 Replies

9. Shell Programming and Scripting

Use ./*glob*

I used this site to check a script. ShellCheck - shell script analysis tool Line 57: zip -u -q Desktop_Items.zip *.desktop ^-- SC2035: Use ./*glob* or -- *glob* so names with dashes won't become options. I do not understand what is wrong with my zip... (6 Replies)
Discussion started by: drew77
6 Replies

10. Shell Programming and Scripting

Issue with user input including * (glob) and sed

Hello All, I have created a script that searches for different things and "sanitizes" the findings from files. Currently the user is required to put in a hostname (server.serverfarm.abc) one at a time to replace. I would like the user be able to use *.*.abc in grep and then pipe into sed to... (1 Reply)
Discussion started by: jvezinat
1 Replies
File::DosGlob(3pm)					 Perl Programmers Reference Guide					File::DosGlob(3pm)

NAME
File::DosGlob - DOS like globbing and then some SYNOPSIS
require 5.004; # override CORE::glob in current package use File::DosGlob 'glob'; # override CORE::glob in ALL packages (use with extreme caution!) use File::DosGlob 'GLOBAL_glob'; @perlfiles = glob "..\pe?l/*.p?"; print <..\pe?l/*.p?>; # from the command line (overrides only in main::) > perl -MFile::DosGlob=glob -e "print <../pe*/*p?>" DESCRIPTION
A module that implements DOS-like globbing with a few enhancements. It is largely compatible with perlglob.exe (the M$ setargv.obj version) in all but one respect--it understands wildcards in directory components. For example, "<..\l*b\file/*glob.p?"> will work as expected (in that it will find something like '..libFile/DosGlob.pm' alright). Note that all path components are case-insensitive, and that backslashes and forward slashes are both accepted, and preserved. You may have to double the backslashes if you are putting them in literally, due to double-quotish parsing of the pattern by perl. Spaces in the argument delimit distinct patterns, so "glob('*.exe *.dll')" globs all filenames that end in ".exe" or ".dll". If you want to put in literal spaces in the glob pattern, you can escape them with either double quotes, or backslashes. e.g. "glob('c:/"Program Files"/*/*.dll')", or "glob('c:/Program Files/*/*.dll')". The argument is tokenized using "Text::ParseWords::parse_line()", so see Text::ParseWords for details of the quoting rules used. Extending it to csh patterns is left as an exercise to the reader. EXPORTS (by request only) glob() BUGS
Should probably be built into the core, and needs to stop pandering to DOS habits. Needs a dose of optimizium too. AUTHOR
Gurusamy Sarathy <gsar@activestate.com> HISTORY
o Support for globally overriding glob() (GSAR 3-JUN-98) o Scalar context, independent iterator context fixes (GSAR 15-SEP-97) o A few dir-vs-file optimizations result in glob importation being 10 times faster than using perlglob.exe, and using perlglob.bat is only twice as slow as perlglob.exe (GSAR 28-MAY-97) o Several cleanups prompted by lack of compatible perlglob.exe under Borland (GSAR 27-MAY-97) o Initial version (GSAR 20-FEB-97) SEE ALSO
perl perlglob.bat Text::ParseWords perl v5.16.3 2013-03-04 File::DosGlob(3pm)
All times are GMT -4. The time now is 03:05 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy