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.