Принятие ни одних из имен файлов содержит символы новой строки:
find "$PWD" -name __openerp__.py | awk -F/ -vOFS=/ 'NF-=2' | sort -u
Откладывание этого было бы проблемами с именами файлов, которые содержат новые строки, существует несколько улучшений эффективности, о которых я могу думать:
$PWD
непосредственно найти, вместо того, чтобы определить его для каждой подоболочки. Это сделает find
включайте полный путь в его вывод.rev
и cut
.Таким образом, я предложил бы, чтобы следующее получило список всех каталогов, содержащих желаемый файл:
find "$PWD" -name '__openerp__.py' |
rev |
cut -d/ -f3- |
rev
Отметьте это find
не заказывает его вывод, таким образом, он должен быть отсортирован прежде uniq'ing это. Как sort
уже поддержки, сжимающие идентичные элементы (-u переключатель), с исходным вопросом можно затем ответить:
find "$PWD" -name '__openerp__.py' |
rev |
cut -d/ -f3- |
rev |
sort -u
sort -u
. Я первоначально думал, что все дублирующиеся записи будут смежны, но нет никакой причины его.
– Stéphane Chazelas
29.01.2014, 15:13
Если я понимаю правильно, Вы хотите список каталогов, содержащих подкаталог, содержащий названный файл __openerp__.py
, без дубликатов.
В zsh:
print -rl -- **/__openerp__.py(:h:h) | sort -u
или
a=(**/__openerp__.py(:h:h)); print -rl -- ${(u)a}
find . -name "__openerp__.py" -exec sh -c '(cd "{}"/../../; pwd)' \; | uniq
$(rm -f "$HOME")
, это будет иметь дорогие последствия. Также это не работает вообще во многих find
реализации. Использовать sh -c 'cd -P "$1/../.." && pwd' sh {} \;
вместо этого.
– Stéphane Chazelas
29.01.2014, 15:15