Czy tu czegoś brakuje? Z pewnością całe to wyrażenie i/lub pętla nie jest konieczna, jedno-liniowy wykona zadanie. Również rozwiązania "for foo in $()" zawiodą, gdy w nazwach ścieżek znajdą się spacje.
Wystarczy użyć dirname dwukrotnie xargs, aby rodzic rodzica ...
# make test case
mkdir -p /nfs/office/hht/info
mkdir -p /nfs/office/wee1/info
touch /nfs/office/hht/info/.user.log
touch /nfs/office/wee1/info/.user.log
# parent's parent approach
cd /nfs//office/ && find . -name '.user.log' | xargs -I{} dirname {} | xargs -I{} dirname {}
# alternative, have find print parent directory, so dirname only needed once...
cd /nfs//office/ && find . -name ".user.log" -printf "%h\n" | xargs -I{} dirname {}
Produkuje
./hht
./wee1
I czy mogę zrobić, aby znaleźć permsissions wynikowego katalogu find. -name '.user_repo.log '| xargs -i {} dirname {} | xargs -i {} dirname {} | xargs ll – Rajeev
Zakładając, że ll, do którego się odnosisz, jest powszechnie używanym aliasem dla "ls -lA", a następnie nie. xargs będzie uruchamiał tylko komendy, a nie aliasy. Jednak można zamiast tego "xargs ls -lA" ... – Adam
Ostrzegamy, flaga '-i' dla' xargs' jest wymieniona jako przestarzała, najlepiej użyj flagi '-I'. –