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.