Differences between revisions 3 and 4
Revision 3 as of 2007-11-30 02:55:12
Size: 999
Editor: GreyCat
Comment: change internal links
Revision 4 as of 2008-05-08 23:52:27
Size: 1029
Editor: GreyCat
Comment: adjust links
Deletions are marked like this. Additions are marked like this.
Line 12: Line 12:
    # Bourne
Line 19: Line 20:
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 23:
    # Bash
Line 28: Line 30:
For more hints in this direction, see [:BashFAQ#faq20:FAQ #20], below. To see why the find command comes after the loop instead of before it, see [:BashFAQ#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].

Anchor(faq15)

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

(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:

    # Bourne
    for file in *.gz
    do
        echo "$file"
        # do something with "$file"
    done

To do it recursively, you should use a loop, plus the [:UsingFind: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 [:BashFAQ/020:FAQ #20]. To see why the find command comes after the loop instead of before it, see [:BashFAQ/024:FAQ #24].

BashFAQ/015 (last edited 2015-03-05 00:30:34 by izabera)