locate -0 '*.txt' | xargs -r0 stat -c "%n %U" >>result.txt
deve fazer o truque
Eu tenho que procurar um tipo de arquivo específico em uma unidade de armazenamento e também quero conhecer seus proprietários.
Com locate '*.txt' >> result.txt
, localizei todos os arquivos que estou procurando, mas estou sentindo falta do proprietário dessa maneira.
Alguma sugestão de como eu poderia fazer isso corretamente?
o locate funcionará enquanto o diretório estiver indexado. Caso contrário, use find
find /directory/to/search -name "*.txt" -exec ls -ld {} + >> result.txt
Se você quiser que ele lide com nomes de arquivos com novas linhas e caracteres especiais, você deverá exibir o nome do usuário primeiro (já que não pode conter caracteres especiais) e uma lista separada por NUL:
locate -0 .txt | xargs -r0 stat --printf "%U %nwhile IFS=: read -r -d '' -u 9 user path
do
whatever_you_want -- "$path"
done 9< <( locate -0 .txt | xargs -r0 stat --printf "%U:%nlocate -0 .txt | xargs -r0 stat --printf "%U %nwhile IFS=: read -r -d '' -u 9 user path
do
whatever_you_want -- "$path"
done 9< <( locate -0 .txt | xargs -r0 stat --printf "%U:%n%pre%" )
"
" )
"
Você pode processar os arquivos com confiança :
%pre%A vantagem em relação à resposta do @ DougONeal é que é fácil analisar o resultado, pois o nome de usuário simples é o primeiro na string, e como os caminhos com novas linhas são tratados corretamente.
Se você realmente deseja apenas arquivos que terminem com o sufixo .txt
, a resposta aceita não fará isso. Ele retornará resultados como este, por exemplo:
$ locate -0 .txt | xargs -r0 stat -c "%n %U" | grep -Ev '.txt '
...
/home/saml/.rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.4/lib/phusion_passenger/templates/apache2/run_installer_as_root.txt.erb saml
/home/saml/.rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.4/lib/phusion_passenger/templates/apache2/welcome.txt.erb saml
/home/saml/.rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.4/lib/phusion_passenger/templates/nginx/ask_for_extra_configure_flags.txt.erb saml
/home/saml/.rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.4/lib/phusion_passenger/templates/nginx/cannot_write_to_dir.txt.erb saml
/usr/share/vim/vim74/doc/usr_42.txt.gz root
...
Em vez disso, você pode dizer a locate
para usar um regex da seguinte forma:
$ locate -0 --regex '\.txt$' | xargs -r0 stat -c "%n %U"