983
Comment:
|
1146
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
[[Anchor(faq15)]] == How can I run a command on all files with the extention .gz? == |
<<Anchor(faq15)>> == How can I run a command on all files with the extension .gz? == |
Line 6: | Line 6: |
zcat *.gz | zcat -- *.gz |
Line 9: | Line 9: |
(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: | On 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. The `--` prevents a filename beginning with a hyphen from causing unexpected results. 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: |
Line 12: | Line 16: |
# Bourne | |
Line 19: | Line 24: |
To do it recursively, you should use a loop, plus the find command: | To do it recursively, you should use a loop, plus the [[UsingFind|find]] command: |
Line 22: | Line 27: |
# Bash | |
Line 28: | Line 34: |
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]. | For more hints in this direction, see [[BashFAQ/020|FAQ #20]]. To see why the `find` command comes after the loop instead of before it, see [[BashFAQ/024|FAQ #24]]. ---- CategoryShell |
How can I run a command on all files with the extension .gz?
Often a command already accepts several files as arguments, e.g.
zcat -- *.gz
On 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.
The -- prevents a filename beginning with a hyphen from causing unexpected results.
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:
# Bourne 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:
# Bash while read file; do echo "$file" # do something with "$file" done < <(find . -name '*.gz' -print)
For more hints in this direction, see FAQ #20. To see why the find command comes after the loop instead of before it, see FAQ #24.