Execute command on all files in a directory
I'm doing this on my Raspberry Pi from the commandline by running:
for i in *; do cmd "$i"; done
How about this:
find /some/directory -maxdepth 1 -type f -exec cmd option {} \; > results.out
-maxdepth 1
argument prevents find from recursively descending into any subdirectories. (If you want such nested directories to get processed, you can omit this.)-type -f
specifies that only plain files will be processed.-exec cmd option {}
tells it to runcmd
with the specifiedoption
for each file found, with the filename substituted for{}
\;
denotes the end of the command.- Finally, the output from all the individual
cmd
executions is redirected toresults.out
However, if you care about the order in which the files are processed, you
might be better off writing a loop. I think find
processes the files
in inode order (though I could be wrong about that), which may not be what
you want.
The following bash code will pass $file to command where $file will represent every file in /dir
for file in /dir/*
do
cmd [option] "$file" >> results.out
done
Example
el@defiant ~/foo $ touch foo.txt bar.txt baz.txt
el@defiant ~/foo $ for i in *.txt; do echo "hello $i"; done
hello bar.txt
hello baz.txt
hello foo.txt