Это работает для меня:
#!/bin/bash
# Setup test directories
mkdir dira dirb .dirc .dird .hiddena
# Setup test files
touch dira/filea1.doc dira/filea2.doc dira/filea3.txt
touch dirb/fileb1.doc dirb/fileb2.doc dirb/fileb3.txt
touch .dirc/filec1.doc .dirc/filec2.doc .dirc/filec3.txt
touch .dird/filed1.doc .dird/filed2.doc .dird/filed3.txt
touch .hiddena/filehiddena1.doc .hiddena/filehiddena2.doc .hiddena/filehiddena3.txt
find . -type d -name "*a" -print | while read DIR
do
find $DIR -type f -name "*a*.doc" -print
done
Выход:
$ ./t.bash
./dira/filea1.doc
./dira/filea2.doc
./.hiddena/filehiddena2.doc
./.hiddena/filehiddena1.doc
В моей первой версии использовался цикл for, но это может вызвать проблемы, если в именах каталогов есть пробелы, поэтому цикл while read
.
Из вашего комментария я сделал это:
# Setup test directories
mkdir dira dirb .dirc .dird .hiddena
# Setup test files
touch dira/filea1.doc dira/filea2.doc dira/filea3.txt
touch dirb/fileb1.doc dirb/fileb2.doc dirb/fileb3.txt
touch .dirc/filec1.doc .dirc/filec2.doc .dirc/filec3.txt
touch .dird/filed1.doc .dird/filed2.doc .dird/filed3.txt
touch .hiddena/filehiddena1.doc .hiddena/filehiddena2.doc .hiddena/filehiddena3.txt
touch .hiddena/z
find . -type d -name "*a" -print | while read DIR
do
#find $DIR -type f -name "*a*.doc" -print
find $DIR -type f -name z -print
done
Вывод, который я получаю:
$ ./t.bash
./.hiddena/z
Так что я не понимаю, почему вы получаете двойной z.