Copie os arquivos e renomeie-os por data de criação

2

Eu tenho alguns diretórios (1 nível) que foram adicionados ao meu servidor em horários específicos. o problema é que eles são nomeados como um hash aleatório.

seria possível copiá-los em algum lugar e renomear a data de criação do diretório original no processo?

    
por user1916182 21.06.2013 / 09:27

1 resposta

2

Se todos os seus diretórios estiverem em ~/foo , você poderá executá-lo (desde que você queira renomear tudo o que está em ~/foo ):

cd ~/foo
for dir in *; do 
    t='stat -c %y "$dir" | awk '{print $1"-"$2}' | 
       cut -d ":" -f 1,2 | sed 's/://''
    mv "$dir" "$t"_"$dir";
done

Por exemplo:

$ ls -gG
total 20
drwxr-xr-x 2 4096 Jun 20 14:41 a
drwxr-xr-x 2 4096 Jun 21 14:40 b
drwxr-xr-x 2 4096 May 16 14:57 c
drwxr-xr-x 2 4096 Jun 21 14:33 d
drwxr-xr-x 2 4096 May  3 16:15 e
$ for dir in *; do 
    t='stat -c %y "$dir" | awk '{print $1"-"$2}' | 
       cut -d ":" -f 1,2 | sed 's/://''
    mv "$dir" "$t"_"$dir";
done
$ ls -gG
total 20
drwxr-xr-x 2 4096 May  3 16:15 2013-05-03-1615_e
drwxr-xr-x 2 4096 May 16 14:57 2013-05-16-1457_c
drwxr-xr-x 2 4096 Jun 20 14:41 2013-06-20-1441_a
drwxr-xr-x 2 4096 Jun 21 14:33 2013-06-21-1433_d
drwxr-xr-x 2 4096 Jun 21 14:40 2013-06-21-1440_b

O truque aqui é usar stat para salvar o tempo de modificação na variável $t , para que possamos usá-lo como um nome. Se você quiser preservar as datas de modificação dos diretórios e apenas mudar o nome, faça algo como:

for dir in *; do 
    old='mktemp' && touch -r "$dir" $old
    t='stat -c %y "$dir" | awk '{print $1"-"$2}' | 
       cut -d ":" -f 1,2 | sed 's/://''
    mv "$dir" "$t"_"$dir"; 
    touch -r $old "$t"_"$dir";
done
    
por 21.06.2013 / 14:53