Como listar todos os arquivos em um disco rígido com ‘find’?

Como listar todos os arquivos em um disco rígido com ‘find’?

Gostaria de listar todos os arquivos no disco rígido, incluindo tamanho, data da última modificação e caminho absoluto.

formato de ideia:

[file size] [last modified date] [absolute path] [ filename] 

Tentei:

ls -lhR | awk -v PWD=$PWD '{printf("%4s %4s %2s %5s %s/%s\n", $5, $6, $7, $8, PWD, $9); }' >> /tmp/report.list 

Funcionou perfeitamente até atingir alguns arquivos/diretórios com espaço entre eles.... Então tentei:

find . -name "*" -exec du -sh {} \; -exec date -r {} \; -exec echo " " \; >> /tmp/report.list

Mas a saída parece espalhada em 3 linhas em vez de 2, e o caminho impresso não é o caminho absoluto para o arquivo.

O que devo fazer?

Responder1

Você pode usar a ação findde -printfpara gerar esses atributos diretamente, por exemplo

find "$PWD" -printf '%s\t%Tx\t%h\t%P\n'
  • %s: Tamanho do arquivo em bytes.
  • %Tx: Hora da última modificação do arquivo, na representação de data do local
  • %h: Diretórios principais do nome do arquivo
  • %P: Nome do arquivo com o nome do argumento da linha de comando sob o qual foi encontrado removido.

O caminho do diretório ( %h) é impresso em relação ao argumento do caminho da linha de comando com o qual o findcomando é invocado: ao especificar o diretório de trabalho usando $PWD, ele se torna absoluto.

Responder2

Você pode usar a -printfopção find:

find / -type "f" -printf "%s\t%TY-%Tm-%Td\t%p\n" > file.txt

Isso cria um arquivo com formato:

[tamanho em bytes]TAB[Data da última modificação no formato AAAA-mm-dd]TAB[FULLPATH]

Ele será executado na estrutura completa do arquivo.

Substitua cada um \tpor um espaço se não quiser que seja delimitado por tabulações. Usando man findvocê pode encontrar outras opções de formato para a -printfopção em find.

informação relacionada