Copiando arquivos com caracteres especiais

Publicado por Sandro Marcell em 15/02/2012

[ Hits: 11.663 ]

Blog: http://sanmarcell.wordpress.com

 


Copiando arquivos com caracteres especiais



Se você já se deparou com uma situação na qual fosse preciso copiar via CLI arquivos cujos nomes tivessem caracteres especiais, tais como: ª, º, §, etc... e por algum motivo, esses arquivos simplesmente não eram copiados! Como fazer agora?

Renomear "na unha" cada arquivo! (e se forem dezenas... ou centenas num compartilhamento!)

Alguns com certeza optam por essa opção. Mas você sendo esperto poderia usar a dupla "ls + find" para listar e copiar esses benditos arquivos pelos seus "inodes" (não sabe o que é inode! Pesquisa no Google.) da seguinte forma:

1 - Liste os inodes dos arquivos:

ls -i

2 - Com o find copie-os para onde quiser:

find . -type f -inum INODE -exec cp -f {} /caminho/destino \;

Obs.: Os inodes são as sequências numéricas listadas à esquerda pelo 'ls -i'.

E se você quiser automatizar o processo, crie um shell script mais ou menos assim:

#!/bin/sh
#
set -e

inodes_list=`ls -i | awk '{print $1}' | tr '\n' ' '`

for i in $inodes_list; do
	find . -type f -inum $i -exec cp -f {} /caminho/destino \;
done

exit $?


Pronto sem dor de cabeça e sem complicações! =)

Mais detalhes?

$ man ls
$ man find


Falou!!!

Previamente publicado em:

Outras dicas deste autor

js-bwm: monitorando seu link de internet em tempo real

Removendo linhas duplicadas não-consecutivas

Ordenando uma lista de IPs (IPv4) com o sort

FreeBSD: "chroot" num pool de armazenamento em ZFS

Vim: fechamento automático de pares de caracteres

Leitura recomendada

Descubra quem é o dono do IP através de um comando shell

Instalar ou Remover Múltiplos pacotes no Void Linux

rename - Comando para renomear todos os arquivos para letra minúscula

SELinux - Resolvendo problemas na carga de módulos .so

Extraindo o conteúdo de uma man page

  

Comentários
[1] Comentário enviado por chimico em 15/02/2012 - 17:32h

Maneiro SMarcell, você pode fazer assim também:

for i in`ls -i | awk '{print $1}' | tr '\n' ' '` ; do cp -fv "$i" /caminho/destino ; done ; sync

Costumo usar `comandos` no loop 'for', e sempre funciona, inclusive com o sed, cut, wc ...

abraços e favoritado

[2] Comentário enviado por removido em 16/02/2012 - 20:09h

@SMarcell, você é o cara!

+ favoritos.

[3] Comentário enviado por daemonio em 17/02/2012 - 02:56h

+fav
Boa dica!!

[4] Comentário enviado por levi linux em 17/02/2012 - 14:37h

Favoritado! Excelente dica!

[5] Comentário enviado por SMarcell em 18/02/2012 - 14:43h

Opá, valeu pelo apoio galera! ;)

[6] Comentário enviado por manoelernando em 25/04/2016 - 16:55h

Tem com copiar diretórios dessa maneira também?



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts