Como arquivos mv em lote para pastas criadas e nomeadas por data de modificação?

1

Sou bastante novo no material do terminal e simplesmente não encontrei nenhuma resposta sobre o assunto mencionado anteriormente.

No meu OS X, eu tenho uma pasta com cerca de 4000 fotos que eu gostaria de mover para as pastas que são nomeadas de acordo com a data de modificação (não a data de criação) dos arquivos. Como posso conseguir isso usando o terminal?

    
por Dave 16.07.2013 / 12:03

2 respostas

2

com perl :

perl -MPOSIX -le 'for (<*.jpg>) {
  $d=strftime"%Y-%m-%d",localtime((stat$_)[9]);
  mkdir$d;rename$_,"$d/$_" or warn "rename $_: $!\n"}'

com zsh :

zmodload zsh/stat
for f (*.jpg) {stat -F %F -A d +mtime -- $f && mkdir -p $d && mv -- $f $d}
    
por 16.07.2013 / 12:38
2

Com o stat do OSX:

for file in *; do
    dir="$(stat -t %Y%m%d%H%M%S -f %Sm -- "$file")"
    mkdir -p "$dir"
    mv -- "$file" "$dir/$file"
done

Com o GNU stat (ou seja, no Linux ou Cygwin):

for file in *; do
    dir="$(stat -c %Y -- "$file")"
    mkdir -p "$dir"
    mv -- "$file" "$dir/$file"
done

Isso moverá cada arquivo para um diretório chamado com seu mtime (como uma época).

Se você quiser um controle mais refinado sobre a aparência do diretório, pode usar a data do GNU para reformatá-lo, alterando a linha de atribuição para algo assim:

dir="$(date -d @"$(stat -c %Y -- "$file")" +%F)"

Consulte man date para obter informações sobre especificações de formato de data que você pode usar. Nesse caso, %F é:

%F full date; same as %Y-%m-%d

    
por 16.07.2013 / 12:22

Tags