Não consigo encontrar como imprimir a data de um arquivo. Até agora, sou capaz de imprimir todos os arquivos em um diretório, mas preciso imprimir as datas com ele.
Sei que preciso anexar um formato de data com o eco da entrada, mas não consigo encontrar o formato correto.
echo "Please type in the directory you want all the files to be listed"
read directory
for entry in "$directory"/*
do
echo "$entry"
done
Respostas:
Você pode usar o
stat
comandoMais informações
fonte
for entry in "$directory"/* do stat -c%y "$entry" done
Não funciona Imprime estatísticas: faltando operando no Terminalstat
?stat -f "%m%t%Sm %N" filename
(verman stat
exemplos para mais detalhes)stat
comando tem uma sintaxe diferente. Meu caso para o FreeBSD:stat -f %Sm -t %F" "%R filename
.O comando 'date' não é muito mais simples? Não há necessidade de awk, stat, etc.
Além disso, considere olhar para a página de manual para formatação de data; por exemplo, com formato comum de data e hora:
fonte
date
não tem isso. É-r
usado apenas para fornecer um carimbo de data / hora para formatar. Você precisará usar a data GNU para obter essa funcionalidade.stat -f "%Sm" -t "%m%d%H%M%y" "${1}"
date [-r seconds | filename]
está totalmente documentado naman
página e funciona conforme o esperado.No OS X, eu gosto da minha data no formato de
YYYY-MM-DD HH:MM
saída do arquivo.Então, para especificar um arquivo, eu usaria:
Se eu quiser executá-lo em vários arquivos, posso fazer algo assim:
Este exemplo será impresso na última vez em que executei o
sudo periodic daily weekly monthly
comando, que faz referência aos arquivos de log.Para adicionar os nomes de arquivos em cada data, execute o seguinte:
A saída seria a seguinte:
Infelizmente, não tenho certeza de como impedir a quebra de linha e manter o nome do arquivo anexado ao final da data sem adicionar mais linhas ao script.
PS - Eu uso
#!/usr/bin/env bash
como usuário Python por dia e tenho versões diferentes dobash
instaladas no meu sistema em vez de#!/bin/bash
fonte
echo -e "$(stat -f %Sm -t %Y%m%d_%H%M%S $AFile)\t$AFile."
. No seu caso, poderia ser:echo -e "$(stat -f "%Sm" -t "%Y-%m-%d %H:%M" "$i")\t$i."
`O melhor é
fonte
Adicionando à resposta @StevePenny, você pode querer cortar a parte não tão legível por humanos:
fonte
Eu queria obter a data de modificação do arquivo em
YYYYMMDDHHMMSS
formato. Aqui está como eu fiz isso:Explicação.É a combinação destes comandos:
fonte
EDITADO: Acontece que eu esqueci as aspas necessárias para
$entry
imprimir corretamente e não dar o erro "não existe esse arquivo ou diretório". Muito obrigado a todos por me ajudarem!Aqui está o meu código final:
Imprime assim:
fonte
Para as quebras de linha, editei seu código para obter algo sem quebras de linha.
fonte
Se o nome do arquivo não tiver espaços:
Isso é impresso como o seguinte formato:
Se os nomes de arquivos tiverem espaço (você também pode usar o seguinte comando para nomes de arquivos sem espaços, apenas parece complicado / feio que o anterior):
fonte
<dir>
que não existe .... o código está perfeitamente correto.Você pode usar:
Isso exibirá a data em 2 dígitos.
Se entre 1 e 9, ele adiciona o prefixo "0" e converte em 01 - 09.
Espero que isso atenda às expectativas.
fonte