How can I run a command on all files with the extention .gz?
Often a command already accepts several files as arguments, e.g.
zcat *.gz
(One some systems, you would use gzcat instead of zcat. If neither is available, or if you don't care to play guessing games, just use gzip -dc instead.) If an explicit loop is desired, or if your command does not accept multiple filename arguments in one invocation, the for loop can be used:
for file in *.gz do echo "$file" # do something with "$file" done
To do it recursively, you should use a loop, plus the find command:
while read file; do echo "$file" # do something with "$file" done < <(find . -name '*.gz' -print)
For more hints in this direction, see [#faq20 FAQ #20], below. To see why the find command comes after the loop instead of before it, see [#faq24 FAQ #24].