Eu tenho vários arquivos nomeados como o that : screenshot 13:25.png
Windows, para tentar abrir esses arquivos provavelmente por causa do ":".
Como posso substituí-lo?
Eu tenho vários arquivos nomeados como o that : screenshot 13:25.png
Windows, para tentar abrir esses arquivos provavelmente por causa do ":".
Como posso substituí-lo?
Respostas:
Em um terminal, cdno diretório certo e execute-o.
rename 's/\:/-/g' *.png -vn
Isso visualizará a renomeação. Deve substituir :por -.
Se isso parecer correto, remova o ndo final e ele fará a renomeação real.
Nota : As versões do Ubuntu acima do 17.04 não são fornecidas rename, mas ainda estão disponíveis nos repositórios padrão, então use-as sudo apt install renamepara obtê-las
n) facilmente.
rename 's/\:/-/g; s/%28/ /g; s/%29//g' ...
Aqui está uma solução pura do bash:
for i in *:*; do
mv "$i" "${i//:/_}"
done
O ${var//pattern/replacement}formato irá substituir todas as ocorrências patterncom replacementna variável $var. Para obter mais informações sobre os recursos de manipulação de string do bash, consulte aqui .
Se você quiser fazer isso para vários caracteres, basta colocá-los em uma classe de caracteres. Assim, por exemplo, para substituir todos ;, :, =, +, %, ,com sublinhados, você poderia fazer:
$ ls
1foo:bar 2foo:bar:baz 3foo;bar 4foo=bar 5foo%bar 6foo,bar 7foo+bar
$ for i in *; do mv "$i" "${i//[:;=%,+]/_}"; done
$ ls
1foo_bar 2foo_bar_baz 3foo_bar 4foo_bar 5foo_bar 6foo_bar 7foo_bar
Basicamente, a ideia é que isso [ ]significa any of the characters listed. Portanto, colocando todos os caracteres que você deseja substituir na classe de personagens, todos eles são tratados de uma só vez.
Para os caracteres específicos que você solicitou, as coisas são um pouco mais complexas, porque algumas precisam ser escapadas (estou ignorando o fato de o /* nix não permitir isso em nomes de arquivos mais do que o Windows, para que não seja um problema. questão):
$ ls
1foo<bar 2foo>bar 3foo:bar 4foo\bar 5foo|bar 6foo*bar 7foo?bar 8foo"bar 9foo'bar
$ for i in *; do mv "$i" "${i//[<>:\\|*\'\"?]/_}"; done
$ ls
1foo_bar 2foo_bar 3foo_bar 4foo_bar 5foo_bar 6foo_bar 7foo_bar 8foo_bar 9foo_bar
Note que eu escapei o \, 'e "adicionando um \na frente de cada um.
Se você preferir uma GUI, instale o pyrenamer:
sudo apt-get install pyrenamer
Em seguida, execute-o:
pyrenamer
Possui dezenas de opções para padrões e formatos de renomeação.
Eu prefiro a GUI, mas como uma extensão do Nautilus, ou seja, ações extras do Nautilus :
sudo add-apt-repository ppa:nae-team/ppa
sudo apt-get update
sudo apt-get install nautilus-actions-extra
nautilus -q
(Consulte www.webupd8.org/2011/12/nautilus-actions-extra-pack-of-useful.html )
Em seguida, quando você seleciona arquivos a serem renomeados e clica em Renomear no menu de contexto, são oferecidas muitas opções para renomear arquivos.
O renameutilspacote possui um programa útil chamado qmvque fornece renomeação em lote interativa. Você o executa em um diretório ou lista de arquivos, e ele gera um arquivo de texto temporário contendo os nomes dos arquivos e inicia o seu editor favorito. Quando você sai do editor, todos os nomes de arquivos alterados são renomeados de acordo. qmvtransforma um problema de renomeação em lote em um problema de edição de texto.
Nesse caso, você pode usar qmv -f do *:*para editar os nomes de todos os arquivos que contêm dois pontos e, em seguida, o :%s/:/_/gcomando no Vim (ou uma pesquisa e substituição correspondente em qualquer editor que você use).
A -f doopção define o formato do arquivo de texto para ter apenas o nome do arquivo de destino, o que simplifica a pesquisa e substituição. O formato padrão possui duas cópias do nome do arquivo em cada linha e você edita apenas a segunda. Isso permite que você faça a coisa certa se você excluiu ou reordenou as linhas no arquivo, mas nem sempre é o mais fácil. Existem outros formatos também.
Com qmv, você pode optar por canalizar o arquivo gerado através de um comando de sua escolha, como sed, se não desejar o recurso interativo.
E aqui está um script do Nautilus que substitui (todos?) Caracteres incompatíveis com o Windows por um hífen em todos os nomes de arquivos selecionados (com base na resposta de terdon ;-)
#!/bin/bash
filesall=""
while [ $# -gt 0 ]
do
files=`echo "$1" | sed 's/ /\?/g'`
filesall="$files $filesall"
shift
done
for i in $filesall; do mv "$i" "${i//[<>:\\|*\'\"?]/-}"; done
O Thunar (o gerenciador de arquivos XFCE) possui um bom recurso para renomear arquivos em massa. Possui opções para remover / substituir caracteres, pesquisar e substituir, numerar arquivos e muito mais.
Instale o thunar:
sudo apt-get install thunar
Abra o thunar, navegue até seus arquivos, selecione-os e escolha 'renomear' (via menu de contexto ou F2)
@echo off
echo.
echo. How many Characters Do You Want To Remove
echo.
echo. From The End Of The FileName ?
echo.
echo.
set /p variable=" > "
setlocal enabledelayedexpansion
for /f "delims=" %%a in (' dir /b /a-d *.mp3') do (
set oldName=%%a
Set newName=!oldName:~0,-%variable%!.mp3
Ren "!oldName!" "!newName!"
)
exit