Поиск Linux текста в файлах того же имени в нескольких папках (maxdepth 2) и генерирует файл отчета

Ситуация: В Linux у меня есть родительская папка с 22 папками различных имен, каждого с файлом конкретного имени asset.xml. Также в этих папках сотни других папок с asset.xmlв них, но это предыдущие версии, и я не интересуюсь ими. Я должен искать в каждом файле 3 тега "legend|assetID|name" и возвратите информацию в этих тегах. Они обычно находятся на той же строке, таким образом, я думаю Grep в порядке.

Что я попробовал:

grep -nr -E "legend|assetID|name" . > /dir/to/the/ReportFile.txt

Это берет слишком долго, и возвратите слишком очень дублированные данные, таким образом, это не практично.

find . -maxdepth 2 -exec grep -E "legend|assetID|name" . > /dir/to/the/ReportFile.txt

Это возвратило ошибку с - должностное лицо, пропускающее аргумент, таким образом, выходной файл был пуст.

find . -maxdepth 2 -| grep -E "legend|assetID|name" . > /dir/to/the/ReportFile.txt

Это возвратило пустой выходной файл.

Вопрос: Как я прохожу каждый подобно названный файл каждый внутренние различно названные папки (которые также имеют другие подпапки с файлами того же имени), и извлеките информацию в 3 тегах и запишите эти данные в выходной файл?

1
задан 15 January 2019 в 07:57

2 ответа

Ваша командная строка с find было почти корректно :-)

Файл (файлы), найденный find представлен {}. -exec часть командной строки находки должна быть закончена так или иначе, с \; или часто лучше с + который вызывает grep только однажды, и я предполагаю, что Вы работаете grep только на нормальных файлах -type f, попробовать

find . -maxdepth 2 -type f -exec grep -E "legend|assetID|name" {} + > ../output

Можно хотеть указать имя файла asset.xml

find . -maxdepth 2 -type f -name asset.xml -exec grep -E "legend|assetID|name" {} + > ../output

Проверьте результат с

cat ../output

Можно хотеть изменить maxdepth к 3 или независимо от того, что подходит.

1
ответ дан 7 December 2019 в 13:19

Я просто нашел решение.

grep -nr -E "legend|assetID|name" /dir/to/the/*/asset.xml > /dir/to/the/ReportFile.txt

* в пути "подстановочный знак", я должен был пройти каждый каталог. Я думаю, что это только переходит к тому каталогу а не в какую-либо более глубокую папку...?

1
ответ дан 7 December 2019 в 13:19

Другие вопросы по тегам:

Похожие вопросы: