Posso listar arquivos ordenados por data adicionados a uma pasta a partir de uma ferramenta de linha de comando como ls?

10

Preciso criar um script que mostre os arquivos na mesma ordem que a pasta Downloads padrão no dock, ordenada por Data de adição, a mais nova primeiro. Não consigo encontrar a opção ls.

Alguma outra maneira de fazer isso?

Ramiro Araujo
fonte
Mostre onde ?
Rob
Linha de comando! Acabei escrevendo um forro que faz o truque. Como não tenho muita reputação, ainda não posso responder minha própria pergunta, farei isso mais tarde.
Ramiro Araujo
Bem-vindo ao site Ramiro - você poderá responder sua própria pergunta a qualquer momento - mas haverá uma restrição para "marcar como aceita" sua resposta. Sinta-se livre para editar minha resposta para atender às suas necessidades ou fornecer sua própria resposta, se / quando quiser.
Bmike

Respostas:

6

Solução mais simples (mais rápida):

mdls -name kMDItemFSName -name kMDItemDateAdded -raw * | \
xargs -0 -I {} echo {} | \
sed 'N;s/\n/ /' | \
sort
Jose Alban
fonte
11
sim, muito melhor :)
Ramiro Araujo
Alguém poderia detalhar o que cada uma dessas linhas faz? Além disso, essa solução pode ser executada no Terminal como linhas de comando individuais (sequencialmente, uma após a outra) ou apenas dentro de um script?
EJ Mak
4

A data adicionada é armazenada como item de metadados kMDItemDateAddede o mdlscomando expõe os dados de cada arquivo passado como argumento para ele.

Portanto, para despejar a data adicionada para todos os arquivos em Downloads em qualquer ordem arbitrária * expandida pelo seu shell, você pode:

mdls -name kMDItemDateAdded ~ / Downloads / *

Você precisará hackear alguma combinação de find e sed / awk / perl / o que for montar um substituto, lsmas talvez o mdfind possa ser chamado pelo seu script, em vez de precisar reinventar lse analisar essa saída.

bmike
fonte
11
Sim! Eu encontrei-o mais tarde e fez uma bela um forro que me ensinou um monte de coisas :) Obrigado pela ajuda
Ramiro Araujo
2
Cole esse forro editando minha resposta - compartilhe o conhecimento!
bmike
2

Bem, como de costume, depois de escrever a pergunta, começo a procurar conteúdo de metadados em arquivos e acabei escrevendo isso:

ls -a | \
grep -v '^\.$\|^\.\.$' | \
xargs -I {} mdls -name kMDItemFSName -name kMDItemDateAdded {} | \
sed 'N;s/\n//' | grep -v '(null)' | \
awk '{print $3 " " $4 " " substr($0,index($0,$7))}' | \
sort -r

Basicamente: 1. lista todos os arquivos 2. filtra. e .. 3. obtém o nome e a data adicionados, uma linha após a outra 4. mescla a cada duas linhas em uma linha 5. extrai a data, a hora e o nome 6. classifica-a ao contrário (como datetime é antecipado, ele classifica por data hora)

Espero que isso ajude mais alguém! :)

@bmike, na verdade, o site me impôs uma restrição para responder minha própria pergunta somente após 8 horas de publicação, devido à minha falta de reputação: D

Ramiro Araujo
fonte
oh, eu dividir a um forro em várias linhas para maior clareza única :)
Ramiro Araujo
11
Use em ls -Avez de -apara não precisar e grep -vpara . ...
mfilej
0

homem sl

 -U      Use time of file creation, instead of last modification for
         sorting (-t) or long output (-l).
Jason
fonte
11
Não, eu preciso da data adicionada, não da data criada. O mesmo que a pasta de downloads padrão no dock
Ramiro Araujo
como a data de adição não é igual à data de criação?
Jason
11
Jason - data de criação é quando o arquivo foi criado; assim, quando o Safari baixa um arquivo de outro computador, ele foi claramente criado para esse download ou poderia ter sido criado meses ou anos antes do download. Veja a minha resposta para mais detalhes sobre onde esses dados fica armazenado no OS X.
bmike