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 find
de -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 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 find
comando é invocado: ao especificar o diretório de trabalho usando $PWD
, ele se torna absoluto.
Responder2
Você pode usar a -printf
opçã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 \t
por um espaço se não quiser que seja delimitado por tabulações. Usando man find
você pode encontrar outras opções de formato para a -printf
opção em find
.