Bash - txt com lista de arquivos + ctime

2

É possível criar um txt, que lista as pastas em um diretório e a data de criação (ou ctime) dessa pasta?

Algo como:

Folders.txt:

Folder1 2016/08/02

FolderA 2016/08/03

Isto é o que eu tenho agora, mas não coloca a data da criação:

find /directory/* -type d -exec bash -c 'echo ${0#/directory/}' {} \; > /directory/folders.txt
    
por blocnt 03.08.2016 / 13:58

2 respostas

3

Observe que ctime é o tempo de status de mudança do inode , não o tempo de criação. A hora da criação, conhecida como tempo de nascimento do inode, às vezes referenciada como btime , não está disponível em todos os Unices ou em todos os sistemas de arquivos.

Por exemplo, no Linux, a hora de nascimento é registrada na maioria dos sistemas de arquivos nativos, mas atualmente não há API para recuperá-la.

Em qualquer caso, esta é a última vez que o inode veio à vida. Isso não reflete o tempo em que os dados foram colocados lá (o que geralmente acontece depois que o inode foi criado), nem necessariamente a hora em que o arquivo foi vinculado a um diretório (pelo nome que você está referindo atualmente como). a hora de nascimento não é atualizada quando o arquivo é renomeado ou vinculado a outro diretório (ou o mesmo que um nome diferente).

Melhor seria geralmente usar o horário da última modificação. Isso representa melhor a idade dos dados no arquivo.

Com o GNU find , você pode usar:

find /directory -mindepth 1 -maxdepth 1 -type d -printf '%P %TY/%Tm/%Td\n'

com zsh :

zmodload zsh/stat
(cd /directory && zstat -LF '%Y/%m/%d' +mtime -- *(D/))

(fornece uma lista classificada em comparação com find . Você pode desativar a classificação com o qualificador oN glob ou classificar por hora de modificação com om )

    
por 03.08.2016 / 15:45
3

Normalmente ls -lc deveria isso. Mas isso mostra arquivos e diretórios.

Então, podemos enganar e pedir por */ entradas; apenas diretórios corresponderão a isso. Mas nós também precisamos do sinalizador -d :

ls -lcd */

Se você quiser um layout específico, então ls não é necessário para a melhor saída.

Poderíamos usar stat , se você tiver presente:

stat --format="%n %z" */

Ambos seguirão links simbólicos, se um link simbólico apontar para um diretório.

Se você não quiser isso, podemos usar find

find * -maxdepth 0 -type d -printf "%p %c\n"

Se você quiser recursiva, então

find * -type d -printf "%p %c\n"
    
por 03.08.2016 / 14:53

Tags