find -printf "%TY-%Tm-%Td %TT %p\n" | sort -n
lhe dará algo parecido com
2014-03-31 04:10:54.8596422640 ./foo
2014-04-01 01:02:11.9635521720 ./bar
Classifique os arquivos no diretório de forma recursiva com base na data da última modificação
Eu modifiquei muitos arquivos em meu diretório para saber quais são esses arquivos classificando-os pela última data de modificação e em que eu quero que algumas das extensões sejam excluídas
no diretório svn eu tenho muitos arquivos .svn que eu não quero mostrar no tipo
Se você quiser nivelar a estrutura de diretórios (classificando por data todos os arquivos em todos os diretórios, ignorando em qual diretório os arquivos estão), o caminho find sugerido por @yeti é o caminho a ser seguido. Se você quiser preservar a estrutura do diretório, tente
$ ls -ltR /path/to/directory
que classifica o diretório com base.
No bash, execute shopt -s globstar primeiro. No ksh93, execute set -o globstar primeiro. Em zsh, você já está definido.
ls -dltr **/*
Isso retornará um erro se você tiver tantos arquivos que o limite de comprimento da linha de comando no seu sistema é excedido. Em zsh, você pode usar isso:
print -rl -- **/*(Om)
Supondo que você esteja acostumado a encontrar o GNU, tente:
find $SOMEPATH -exec stat -c '%Y %n' '{}' + | sort -n
Para listar robustamente os nomes de arquivos usando apenas ferramentas GNU recentes:
find . -printf '%A@ %pfind . -printf '%A@ %p%pre%' |
sort -nz |
sed -z 's/^[^ ]* //' |
tr '%pre%' '\n'
' |
sort -nz |
sed -z 's/^[^ ]* //' |
tr '%pre%' '\n'
find $DIR -depth -maxdepth 3 \
-type d -readable -printf \
'printf "\n%p\n"
ls -t --color=always "%p"\n' |\
. /dev/stdin 2>&-
Isso evita qualquer problema na lista de argumentos, porque o único argumento ls irá receber o nome do diretório que você deseja listar. Você pode fazer isso com o que quiser.
O shell apenas . sources o |pipe como um script de shell - é o mesmo processo e não tem os problemas que você pode encontrar quando execve é chamado.
Em qualquer caso - o acima só vai de três profundidades, o que é ajustável, alterando maxdepth . Também em primeiro lugar - para que você volte ao seu diretório atual em depth .
Você pode perceber que também obtém $LSCOLORS - em minha máquina também fornece colunas bem impressas e tudo mais que você deseja de ls - ou, para que importa, qualquer coisa que você possa imaginar que você gostaria de fazer com . source.
Novamente, isso fará o que você espera de ls . Então, ocultar .svn arquivos é tão simples quanto alterar ls linha para:
ls -t --color=always --hide="*svn" "%p"\n
Ou se você quiser ver as extensões svn em todas as pastas, MAS ./svn você pode alterá-lo para que o comando inteiro seja assim:
find $DIR -depth -maxdepth 3 \
-type d -readable -printf \
'printf "\n%p\n" ; hide=
[ "%p" = "./svn" ] && hide="*svn"
ls -t --color=always --hide="$hide" "%p"\n' |\
. /dev/stdin 2>&-
Pessoalmente, gosto dele com -s e, se você se importa, -u classificará por tempo de acesso em vez de tempo de mod.
Este listará todos os files em <dir> sendo o mais antigo modificado
find <dir> -type f -print0 | xargs -0 ls -ltr
E com isso, o mais recente modificado é o mais importante
find <dir> -type f -print0 | xargs -0 ls -lt
Observe que isso só funciona se a lista de nomes de arquivos não exceder o limite total de comprimento da linha de comando em seu sistema.