Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a directory and many more subdirectories like the following -

file with spaces.txt

The command -

find . -type f -print0 | xargs -0 file | grep text | grep -v long | cut -d: -f1

produces the correct list of files (i.e. text files that do not contain very long lines)

./file with spaces.txt

But when I add another xargs to the end of the command I get errors -

find . -type f -print0 | xargs -0 file | grep text | grep -v long | cut -d: -f1 | xargs -0 awk -f someprocessing.awk

gawk: someprocessing.awk:3: fatal: cannot open file `./file' for reading (No such file or directory)

The content of someprocessing.awk is not relevant as I get the same error if I use the cat command instead.

How do I get the command after the last pipe to work with files with spaces in their names?

share|improve this question
up vote 2 down vote accepted

find -print0 produces output with null characters as delimiters. xargs -0 requires input with null characters as delimiters. Your first xargs command gets its null characters from find; the second one sees newline characters instead.

Try this:

find . -type f -print0 | \
    xargs -0 file | \
    grep text | \
    grep -v long | \
    cut -d: -f1 | \
    tr '\n' '\0' | \
    xargs -0 awk -f someprocessing.awk

(This should work for the GNU Coreutils version of tr; I'm not certain about other tr implementations.)

share|improve this answer
Thanks, that sorted it. – bryan Oct 19 '11 at 21:13

The solution accepted will screw up if the file name contains ':'. The following will only fail if the file names contain ': ' and avoids the \0 manipulation:

find . -type f | parallel file | grep text | grep -v long |\
parallel --colsep ': ' awk -f someprocessing.awk {1}

It uses GNU Parallel so you get the awk done in parallel for free.

Watch the intro videos to learn more:

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.