Giuseppe Minardi
Giuseppe Minardi

Reputation: 411

Get list of file fron regex

I'm trying to do a bash script that extract info from pdf documents. the first argument should be a regex or the name of a file. Es:

$ autobib shrek2001.pdf
$ autobib *.pdf

My idea is to generate a list of files matching the regex and extract information from them. My code at the moment looks like this:

for article in $(ls $1);do
    pdfinfo $article
done

But doing so the loop stops at the first file. How can I loop over all the files matching my regex?

Upvotes: 0

Views: 48

Answers (1)

Mark
Mark

Reputation: 4453

clpgr has it completely right. Change your program to look like this:

for article in "$@" ;do
    pdfinfo $article
done

The reason your program only does the first file is that the shell command gets globbed. That is, when you issue the command autobib *.pdf, you are really issuing this command: autobib 1.pdf 2.pdf 3.pdf (well, I'm making up some file names since I don't know what's in the directory. But the point is, your program will have $1 set to 1.pdf so you'll be executing this code $( ls 1.pdf ) which would only return 1.pdf.

Truth is, your program may have worked (depending on the file names in the directory) if you executed this way: autobib "*.pdf". In this example, the "*.pdf" is not globbed by the shell because it is quoted. Now, your program's $1 variable will have the value *.pdf.

That said, "$@" is soooooo much better than $( ls $1 ). "$@" will actually preserve spaces in the arguments.

Upvotes: 1

Related Questions