Movendo determinados arquivos para o novo local (e acrescentando o tempo de data)

1

Eu tenho dois diretórios:

/routea/path/to/dir1
/routeb/path/to/dir2

em dir1 eu tenho alguns arquivos:

file.name
file.name.1
file.name.2
file.name.3

(pode haver mais de 4 arquivos). Preciso mover os arquivos que terminam de 1 a 3 para dir2

Eu tentei (o que eu presumi ser o passo óbvio) de:

mv /routea/path/to/dir1/file.name.* /routeb/path/to/dir2/

Mas isso só me diz

mv: cannot stat '/routea/path/to/dir1/file.name.*': No such file or directory

Para complicar, idealmente, gostaria de adicionar um registro de data e hora ao final de cada arquivo conforme eu os movo, então acabo com algo como file.name.1.yyyymmddhhmmss

alguém pode me apontar na direção certa, por favor. Eu suponho que precisarei usar algum tipo de loop para fazer isso, mas não consigo ver como.

    
por IGGt 23.10.2015 / 15:53

3 respostas

1
find dir1/ -name "file.name.[1-3]" -exec bash -c 'mv {} dir2/$(basename "{}").$(date +%Y%m%d%H%M%S)' \;
    
por 23.10.2015 / 16:32
2

Você pode fazer isso por exemplo com o loop for como o abaixo:

for f in /routea/path/to/dir1/file.name.? ; do fn='echo $f | cut -d'/' -f6';  mv $f /routeb/path/to/dir2/$fn.'date +%Y%m%d%H%M' ; done

O comando cut deve ser personalizado com base em quantos subdiretórios você possui. Data é adicionada também. Testado com bash no RedHat.
Se você iniciar o comando no diretório /route/path/to/dir1/ , não será necessário o

fn='echo $f | cut -d'/' -f6'; 

parte.

    
por 23.10.2015 / 16:09
1

com zsh :

autoload zmv # best in ~/.zshrc
zmv "/routea/path/to/dir1/(file.name.<1-3>)" "/routeb/path/to/dir2/\.$(date +%Y%m%d%H%M%S)"
    
por 23.10.2015 / 16:17

Tags