Eu tenho um valor de GB de música no meu HDD que foi formatado com EXT4. Quero mover esses arquivos para uma partição de disco rígido formatada em FAT. No entanto, não consigo mover a maioria dos meus arquivos porque eles têm ":" nos nomes (por exemplo, "Ato 2: ....." para óperas). Existe uma maneira com a linha de comando renomear todos os meus arquivos de "XXXX: XXXX" para "XXXX-XXXX"?
fonte
find .
nome de um subdiretório precede seu conteúdo. Portanto, se você tiver um arquivo/1:/2:
primeiro/1:/
, será renomeado para/1-/
. Agora você não pode renomear/1:/2:
para/1-/2-
porque/1:/2:
não existe.find . -type d -readable -writable -exec rename 's|:|-|g' {} \;
E então arquivos:find . -type f -readable -writable -exec rename 's|:|-|g' {} \;
for i in {1..20}; do find . -maxdepth $i -mindepth $i -name "*:*" -exec rename 's|:|-|g' {} \;; done
. Altere 20 para a profundidade máxima do dir. estrutura. Não precisa ser exato - pode ser maior. Porém, levará tempo se for definido para um número muito grande.Eu não estou na minha máquina Linux agora, então só posso fornecer informações aproximadas.
O Linux possui um utilitário de linha de comando chamado
rename
que funciona com outras entradas, expressões regulares ou expressões regulares. Você poderá usá-lo junto com uma regex como "s /: / - /" em seus arquivos para obter a renomeação desejada.Para garantir a segurança, faça-o em pequenos lotes e / ou primeiro teste com a simulação (renomear possui um sinalizador que fornece apenas o nome antigo e o novo nome do arquivo sem realmente renomear - use-o para verificar primeiro)
fonte
Esta é uma solução em python que lida com o caso em que os arquivos não estão necessariamente no mesmo diretório.
rootdir
para o diretório mais externo em consideração (use o nome completo do caminho começando com /. Nenhuma abreviação ou variáveis env como ~ permitida). Não é necessário colocar \ antes de caracteres especiais - por exemplo, se o diretório mais externo for /.../My HDD, coloquerootdir = "/.../My HDD"
NOTrootdir = "/.../My\ HDD"
(Observe os "s) [Estou sendo explícito apenas porque você pode não estar familiarizado com o python. Sem desrespeito pretendido.]logfile
para o local desejado do arquivo de log. No final, esse arquivo conterá a lista de arquivos renomeados - para referência futura.python rename.py
.Aviso: teste em uma pequena amostra antes de arriscar um GB inteiro de música.
Detalhes: A renomeação é realizada a partir dos arquivos mais internos.
fonte
Sei que este é um post muito antigo. A solução recursiva do AeroGT80 é muito completa, mas é bem lenta. Eu o executei por cerca de meia hora em um servidor mais lento e só foi concluído pela metade - acho que eram cerca de 73.000 arquivos em cerca de 300 subdiretórios.
A solução abaixo funcionará muito mais rapidamente (opera em todos os arquivos em um diretório, em vez de cada arquivo, um por um - usando a solução não recursiva do AeroGT80). O único problema é que ele apenas desce profundamente em um diretório (por isso não é totalmente recursivo como a solução dele), mas tenho certeza de que poderia ser modificado com bastante facilidade.
fonte