Taylor Reed
Taylor Reed

Reputation: 355

for loop through files with spaces and some special characters

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

Upvotes: 0

Views: 2162

Answers (3)

Taylor Reed
Taylor Reed

Reputation: 355

I accomplished this using the following command

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

Upvotes: 1

chepner
chepner

Reputation: 531075

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

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

Upvotes: 0

choroba
choroba

Reputation: 241848

Use the -exec option

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

Upvotes: 1

Related Questions