Оказывается, из-за переменной PATH в наших окнах мы связывались с drush, отличным от предыдущей установки. Этот драш отправлял несовпадающую цитату на удаленный хост, который отправлял обратно ошибки sh
.
Мы обновили путь (после тестирования, указав полный путь к drush ), и теперь он работает.
Итак, вы хотите просмотреть каталоги вида */analysis
, исключая определенные подкаталоги.
Вместо поиска всего под .
ищите только под */analysis
.
Чтобы исключить подкаталог, используйте -prune
. Это действие указывает find не проходить рекурсивно по этому подкаталогу.
Наконец, чтобы проверить, существует ли файл, соответствующий шаблону, вам нужно вызвать оболочку. Вы вызываете test
непосредственно из find
, но test
не выполняет сопоставление с образцом, поэтому проверяется только наличие файла, имя которого содержит буквальный символ *
. Вызовите sh
, передав ему имя каталога в качестве аргумента :-exec sh -c '…' {} \;
. В коде sh разверните подстановочный знак, чтобы создать список соответствующих файлов, и проверьте, существует ли хотя бы один существующий файл.
find./*/analysis -name "doc" -prune -o -name "gold" -prune -o \
-type d \! -exec sh -c 'set -- "$0"/*_out.csv; test -e "$1"' {} ';' -print
(Я предполагаю, что не существует оборванных символических ссылок, имя которых заканчивается на _out.csv
.)
Ваша задача дублирует этот вопрос . Та же стратегия сработает:
Найдите все ваши *_файлы out.csv, удалите базовое имя и уникируйте список.
Найдите все каталоги, которые, как вы надеетесь, будут иметь *_файлы out.csv, и удалите записи в списке 1 из списка на шаге 2.
Этот сценарий делает это с выходными дескрипторами:
echo "csv files exist in:"
find. -type f -name \*_out.csv | sed -e 's/\/[^\/]*$//' |
sort -u | tee csv-dirs.txt
echo
echo "dirs we hope would have csv's:"
find. -type d | egrep '/analysis/' | egrep -v '/(doc|gold)(/.*|)$' |
tee all-dirs.txt
echo
echo "all dirs less the ones that do have csv's:"
egrep -vxFf csv-dirs.txt all-dirs.txt
Немного сжато, это может быть просто:
$ find. -type f -name \*_out.csv |
sed -e 's/\/[^\/]*$//' | sort -u > csv-dirs.txt
$ find. -type d | egrep '/analysis/' |
egrep -v '/(doc|gold)(/.*|)$' | egrep -vxFf csv-dirs.txt
./case1/analysis/test2
./case2/analysis/test3