Script que move todos os arquivos de uma pasta para outra

1. Script que move todos os arquivos de uma pasta para outra

leonidas roberto
leonidas_linux

(usa Kali)

Enviado em 21/09/2018 - 12:28h

Bom dia galera!

Eu preciso fazer um script em sh que mova tudo de uma pasta para outra, porem utilizando o comando "mv" inicialmente usei a sintax "mv /blabla/caminho/* /destino" para ele copidar qualquer coisa que estiver nesse diretório para o /destino, porém percebi que quando existe um arquivo com espaço no nome ele da uma mensagem de erro informando que a "pasta não está vazia".
Eu queria saber de vcs mestres do linux se existe com resolver esse problema sem ter que fazer um script que substitua todos os "espaços" por "?" por exemplo

Desde já agradeço a colaboração de todos.


  


2. Re: Script que move todos os arquivos de uma pasta para outra

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 21/09/2018 - 13:35h

leonidas_linux escreveu:

Bom dia galera!

Eu preciso fazer um script em sh que copie tudo de pasta para outra, porem utilizando o comando "mv" inicialmente usei a sintax "mv /blabla/caminho/* /destino" para ele copidar qualquer coisa que estiver nesse diretório para o /destino, porém percebi que quando existe um arquivo com espaço no nome ele da uma mensagem de erro informando que a "pasta não está vazia".
Eu queria saber de vcs mestres do linux se existe com resolver esse problema sem ter que fazer um script que substitua todos os "espaços" por "?" por exemplo

Desde já agradeço a colaboração de todos.


se vc quer copiar use "cp" ou "rsync" ... "mv" é para mover.

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



3. Re: Script que move todos os arquivos de uma pasta para outra

leonidas roberto
leonidas_linux

(usa Kali)

Enviado em 21/09/2018 - 14:13h

Mauriciodez escreveu:

leonidas_linux escreveu:

Bom dia galera!

Eu preciso fazer um script em sh que copie tudo de pasta para outra, porem utilizando o comando "mv" inicialmente usei a sintax "mv /blabla/caminho/* /destino" para ele copidar qualquer coisa que estiver nesse diretório para o /destino, porém percebi que quando existe um arquivo com espaço no nome ele da uma mensagem de erro informando que a "pasta não está vazia".
Eu queria saber de vcs mestres do linux se existe com resolver esse problema sem ter que fazer um script que substitua todos os "espaços" por "?" por exemplo

Desde já agradeço a colaboração de todos.


se vc quer copiar use "cp" ou "rsync" ... "mv" é para mover.

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------

Eu quero realmente mover meu amigo, obrigado por pela atenção.
Já corrigi o texto acima, com o cp acontece a mesma coisa, já com rsync não sei



4. Re: Script que move todos os arquivos de uma pasta para outra

Daniel Lara Souza
danniel-lara

(usa Fedora)

Enviado em 21/09/2018 - 14:37h

usa o rsync então com a opção --iconv=

rsync -auvz --iconv=utf8,iso88591 /blabla/pasta/* /destino/

espero que ajude


5. Re: Script que move todos os arquivos de uma pasta para outra

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 21/09/2018 - 14:39h

leonidas_linux escreveu:
Eu quero realmente mover meu amigo, obrigado por pela atenção.
Já corrigi o texto acima, com o cp acontece a mesma coisa, já com rsync não sei


eu aqui uso o rsync tanto para copiar quanto para mover

https://www.vivaolinux.com.br/artigo/Transferindo-arquivos-com-o-rsync
https://e-tinet.com/linux/sincronizacao-de-arquivos-no-linux-rsync/
https://www.vivaolinux.com.br/artigo/Conhecendo-o-rSync


------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



6. Re: Script que move todos os arquivos de uma pasta para outra

Paulo
paulo1205

(usa Ubuntu)

Enviado em 21/09/2018 - 17:12h

Não consegui reproduzir esse comportamento do mv que você falou.
$ mkdir -p "dir1/sub dir 1" dir2
$ touch "dir1/a b" "dir1/c d" "dir1/e f" "dir1/sub dir 1/y z"
$ ls -Ra dir1 dir2
dir1:
. .. 'a b' 'c d' 'e f' 'sub dir 1'

'dir1/sub dir 1':
. .. 'y z'

dir2:
. ..
$ mv dir1/* dir2/
$ ls -Ra dir1 dir2
dir1:
. ..

dir2:
. .. 'a b' 'c d' 'e f' 'sub dir 1'

'dir2/sub dir 1':
. .. 'y z'


Algumas explicações possíveis para o mv não ter conseguido mover um conteúdo:
  • algum arquivo no meio da cópia ter um atributo que o marca de maneira especial (ver documentação de chattr);
  • algum programa externo ter criado um outro arquivo no diretório (ou subdiretório dentro dele) durante a execução do mv, e que acabou não entrando na operação de movimentação (particularmente se você estiver movendo dados entre partições diferentes);
  • o diretório de origem (ou algum subdiretório dentro dele) é ponto de montagem de algum volume que está montado;
  • o diretório de origem se refere a uma área de dados montada por NFS, e algum dos arquivos movidos para outro destino (e, portanto, na verdade copiados e apagados, em vez de simplesmente movidos) estava em uso (na mesma máquina ou em outra da rede).

A maioria desses casos deveria dar outra(s) mansagem(ns) de erro antes da que diz que não se pode apagar um diretório de origem. A simples presença de espaços, no entanto, não seria uma delas.


7. Re: Script que move todos os arquivos de uma pasta para outra

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 21/09/2018 - 18:22h

leonidas_linux escreveu:

Bom dia galera!

Eu preciso fazer um script em sh que mova tudo de uma pasta para outra, porem utilizando o comando "mv" inicialmente usei a sintax "mv /blabla/caminho/* /destino" para ele copiar qualquer coisa que estiver nesse diretório para o /destino, porém percebi que quando existe um arquivo com espaço no nome ele da uma mensagem de erro informando que a "pasta não está vazia".
Eu queria saber de vcs mestres do linux se existe com resolver esse problema sem ter que fazer um script que substitua todos os "espaços" por "?" por exemplo

Desde já agradeço a colaboração de todos.


Boa tarde Leonidas.

Para trocar os espaços por "?", faça:
rename 's/ /?/g' origem/*.txt 

Para mover, faça:
for arq in $(ls -1 origem/*.*);do 
mv ${arq} destino/
done
Ou
find origem/ -iname "*.*" -exec mv {} destino/ \;

Obs.: Altere origem e destino para o nome real dos diretórios.
Marcelo Oliver


8. Re: Script que move todos os arquivos de uma pasta para outra

Paulo
paulo1205

(usa Ubuntu)

Enviado em 23/09/2018 - 21:25h

msoliver escreveu:

Boa tarde Leonidas.

Para trocar os espaços por "?", faça:
rename 's/ /?/g' origem/*.txt 


Tenho quase certeza de que não é isso que ele quer. Além do mais, não estou certo de que esse programa “rename” seja tão comum a muitas distribuições.

Para mover, faça:
for arq in $(ls -1 origem/*.*);do 
mv ${arq} destino/
done


Essa sugestão é uma forma de garantir que ele terá problemas com arquivos cujos nomes contenham espaços. E, se você pensar bem, vai ver que ela é muito redundante, pois você diz através do shell quais arquivos o ls deve listar, e depois pega (ou tenta pegar) os mesmos nomes de arquivos que já havia informado desde o início.

E outra: na postagem original, não percebi que os nomes de arquivos necessariamente incluíssem um caráter ponto.

Ou
find origem/ -iname "*.*" -exec mv {} destino/ \;


Esse não daria o mesmo erro em arquivos cujos nomes contivessem espaços, e tem o benefício de não fazer a expansão dos nomes dos arquivos com o próprio shell (o que economiza memória). Por outro lado, se houver milhares de arquivos para mover, serão milhares de processos criados para executar um comando mv para cada arquivo. Isso é um desperdício no caso de um comando como mv, que permite informar múltiplos operandos numa só execução.

Minha recomendação contra o desperdício é conjugar o find (provavelmente com o predicado -print0) com o xargs (come as opções -0 e -r). Mas como o mv tem de receber os argumentos da origem antes do argumento de destino, você provavelmente vai precisar também das opções -I e -L do xargs.


9. Re: Script que move todos os arquivos de uma pasta para outra

Paulo Bonfanti
pbonfanti

(usa Debian)

Enviado em 24/09/2018 - 16:22h

danniel-lara escreveu:

usa o rsync então com a opção --iconv=

rsync -auvz --iconv=utf8,iso88591 /blabla/pasta/* /destino/

espero que ajude


Eu iria pela sugestão do danniel-lara, eu nem imaginava que o rsync tinha uma opção de iconv. Cada dia se aprende mais uma coisa.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts