Started to learn some shell scripting. I have a perl script that runs on one file. How would I write a shell script to run the perl script a bunch of times on all files with keyword "filename" in it?
So in English,
for /filename/ in filenames
perl myscript.pl completefilename
Thanks.
And if you have spaces in your filenames, use the old standby
In bash:
One liner:
$ for file in filename1 filename2 filename3; do perl myscript $file; done
Instead of the space separated list of filenames you can also use wildcards, for instance:
$ for file in *.txt *.csv; do perl myscript $file; done
FILES="keyword"
for f in "$FILES" do perl myscript.pl $f done
From http://www.cyberciti.biz/faq/bash-loop-over-file/
I personally use the zsh shell, which gives you a very nice way to run a command recursively on a set of subdirectories. It also allows you to change the suffix of the file, which is handly when using lame to create MP3 files of .wav files:
for i in **/*.wav; lame $i $i:r.mp3
You can also pipe the output of one command to another, which I something I use frequently when I'm downloading a number of bittorrent files and want to see the percentage that each download has completed:
for i in **/*.txt; grep -H percent $i | tail -1