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

2

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

formato da ideia:

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

Eu tentei:

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

Funcionou perfeitamente até atingir alguns arquivos / diretórios com espaço intermediário .... Então eu tentei:

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

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

O que devo fazer?

    
por Martin Wang 04.06.2015 / 03:29

2 respostas

2

Você pode usar a ação find -printf para 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 da data do locale
  • %h : Diretórios principais do nome do arquivo
  • %P : nome do arquivo com o nome do argumento da linha de comando sob o qual ele 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 comando find é chamado: ao especificar o diretório de trabalho usando $PWD , ele se torna absoluto.

    
por steeldriver 04.06.2015 / 04:24
1

Você pode usar a opção -printf em find:

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

Isso faz 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 de arquivos.

Substitua cada \t por um espaço se não quiser delimitá-lo por tabulações. Usando man find , você pode encontrar outras opções de formato para a opção -printf em find .

    
por Julian Stirling 04.06.2015 / 04:26