Potřebuji vygenerovat seznam souborů z diskového svazku. Některé z adresářů (všechny skryté adresáře v kořenovém adresáři) mají podivná oprávnění, která způsobují stížnosti find.
Snažím se vyloučit všechny tyto cesty, ale jeden adresář si stále stěžuje:
find . -type f -not -path './.*/*'
find: ./.DocumentRevisions-V100: Permission denied
Práva jsou takto (nastavena operačním systémem, takže předpokládám, že by se s nimi nemělo zaměňovat).
d--x--x--x root wheel .DocumentRevisions-V100
Jak změním find
příkaz účinně vynechat všechny skryté adresáře, abyste si nestěžovali. (Nechci dělat 2>/dev/null
jak chci vědět o jiných problémech).
Přijatá odpověď:
Pomocí GNU find nebo jakéhokoli jiného hledání, které podporuje -readable
a -executable
predikáty:
find . -type d ! ( -readable -executable ) -prune -o -type f -not -path './.*/*' -print
Nejprve ořízneme adresáře, které nelze procházet. Pokud tato podmínka neplatí, zkuste jiné podmínky.
Pokud váš find
nemá tyto možnosti, můžete je porovnávat s oprávněními souboru.
find . -type d ! -perm -u+rx -prune -o -type f ! -path './.*/*' -print