Não tive muito sucesso em encontrar uma versão Linux do namemangler , que preciso renomear 1000 arquivos para que sejam legíveis no Windows.
Alguém sabe de um programa Linux que pode fazer isso?
Caso contrário, um script poderá funcionar, pois só preciso renomear todos os arquivos em uma pasta para, digamos, os 16 primeiros caracteres. Eu suspeito que a rota do script pode valer a pena ir para baixo, mas não sei por onde começar.
Respostas:
No Debian, Ubuntu e derivados, se você digitar
man rename
em um prompt de comando, obterá a página de manual para um utilitário de renomeação que permite que comandos arbitrários de expressão regular do tipo Perl sejam usados na renomeação.Por exemplo, isso reduzirá (truncando) todos os arquivos no diretório atual para um comprimento de cinco:
Ele funciona capturando os cinco primeiros caracteres e usando-o na substituição, removendo o restante.
Outro exemplo é reduzir os nomes de arquivos (sans extension) para cinco caracteres, preservando a extensão:
Ele captura dois grupos, o primeiro sendo o primeiro caractere cinco, o segundo sendo a extensão. Isso iria transformar
myCarefullyCraftedDocument.pdf
emmyCar.pdf
.Aviso: use isso com cuidado, de preferência em uma cópia do seu diretório ou fazendo backups primeiro. Você foi avisado!! No mínimo, use
rename -n
primeiro, o que mostrará o que seria feito sem realmente fazê-lo.fonte
Você pode mover arquivos em conflito para outro diretório:
fonte
Você pode escrever um script para reduzir nomes de arquivos e remover caracteres que o Windows não gosta em algumas linhas do bash. Aviso, código não testado, digitado diretamente no meu navegador.
Se você precisar recursar em subdiretórios, chame um shell script de
find -depth -exec …
. Ou use zsh em vez de bash; no zsh,**/*(od)
expande para todos os arquivos no diretório atual, recursivamente, primeiro com os arquivos mais profundamente aninhados.fonte
Os scripts shell / python / perl para esse tipo de coisa são bons, mas parece que um aplicativo de interface gráfica seria o melhor para você, então eu recomendaria o pyRenamer , que pode fazer exatamente o que você deseja, entre muitas outras coisas (operações comuns simples através de predefinições [se livrando de espaços, truncando o nome do arquivo de um ponto para outro], pesquisa / substituição simples, regex complicado, visualizador, etc).
Sua distribuição pode até tê-la em seu repositório de software (o Fedora possui).
fonte
Alguns sistemas não possuem o
rename
comando, portanto, como alternativa à resposta do paxdiablo, veja como fazer a mesma coisamv
.O
-b
sinalizador em movimento cria um backup dos arquivos que seriam excluídos ou substituídos. Alterando o padrão glob no loop for, você pode ajustar quais arquivos são executados, usando*
por si só para executar todos os arquivos.fonte
echo
e um pipe (pode ser muito caro se você tiver muitos arquivos), use um heredoc ou herestring.eval 'echo $BASH_SUBSHELL'
eeval 'echo $BASH_SUBSHELL' | cat
.time
usando um loop usandoecho $i | sed
e outro usandosed ... <<<$i
, e o herestring levou cerca de 2/3 do tempo do eco.<<
inicia um <i> doc </i> aqui, que é multi-linhas e requer delimitadores.<<<
cria uma <i> string </i> aqui, que leva apenas uma variável / string. Experimentevar=abc // cat<<<$var // cat <<$var
.Se você precisar renomear arquivos e tiver bibliotecas do KDE instaladas no seu sistema (ou não se importa de adicioná-las), confira o krename.
Ele permite executar várias tarefas simples de renomeação diretamente com suas ferramentas e também permite expressões regulares para situações mais complicadas.
Ele mostra uma visualização dos arquivos renomeados conforme você cria as condições de renomeação. Ele também permite que você renomeie os mesmos arquivos novamente, o que é útil se você quiser fazer algo complicado, pois fazê-lo em estágios reduziria a complexidade de cada estágio a algo que você pode descobrir rapidamente.
fonte
fonte