UNIX найти для поиска имен файлов, не связанных с - PullRequest
0 голосов
/ 03 февраля 2012

Есть ли простой способ рекурсивного поиска всех файлов в иерархии каталогов, у которых нет соответствующего файла с другим расширением?

Например, в каталоге есть куча файлов, оканчивающихся на .dat

Я хочу найти файлы .dat, у которых нет сопровождающего файла .out.

У меня есть цикл while, который проверяет каждую запись, но это медленно для длинных списков ...

Я использую GNU find.

Ответы [ 3 ]

1 голос
/ 03 февраля 2012
find . -name '*.dat' -printf "[ -f %p ] || echo %p\n" | sed 's/\.dat/.out/' | sh
1 голос
/ 03 февраля 2012

Может, как-то так?

find . -name "*.dat" -print | sort > column1.txt
find . -name "*.out" -print | sort > column2.txt
diff column1.txt column2.txt

Я не проверял это, но думаю, что это, вероятно, близко к тому, что вы просите.

0 голосов
/ 04 февраля 2012

Мне пришлось добавить кучу наворотов к 1-му решению, но это было хорошее начало, спасибо ...

найти. -принт | grep -Fi '.dat' | grep -vFi '.dat.' | сортировать | sed -e 's / .dat // g'> column1.txt
находить . -принт | grep -Fi '.out' | grep -vFi '.out.' | сортировать | sed -e 's / .out // g'> column2.txt
sdiff -s column1.txt column2.txt | grep -F '<' | cut -f1 -d "<"> c12diff.txt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...