for loop through files with spaces and some specia

2019-01-29 14:23发布

问题:

I need to run the following command with a for loop

cat Locate\ Message.eml | ./locatePipe.php

I am trying the following however it seems to break on the first space in the file name

for i in $(find -name "*.eml"); do cat $i | ./locatePipe.php; done

Some of the file names contain "@", "()", "-", ".", "[]", " ' " if that matters

回答1:

Use the -exec option

find -name '*.eml' -exec cat {} + | ./locatePipe.php


回答2:

I accomplished this using the following command

find -name '*.eml' | while read email; do cat "$email" | ./locatePipe.php; done


回答3:

If you're using bash 4, just skip using find:

shopt -s globstar
for i in **/*.eml; do
    cat "$i"
done | ./locatePipe.php