Por exemplo, eu quero mv (.*?).sql $1.php
,
existe um comando que me permita especificar padrões de renomeação?
fonte
Por exemplo, eu quero mv (.*?).sql $1.php
,
existe um comando que me permita especificar padrões de renomeação?
Como outros já mencionaram, rename
é bom nisso, mas leia a página de manual ( man rename
) antes de tentar. Existem pelo menos duas ferramentas completamente diferentes por aí chamadas rename
e qual delas você dependerá da sua distribuição. Chamá-los incorretamente pode ser perigoso.
Aqui está a página de manual da versão baseada em perl de Larry Wall que acompanha o Ubuntu. Você dá uma expressão perl comorename 's/\.sql$/.php/' *.sql
Aqui está a página do manual para renomear as distribuições Red Hat e CentOS mais antigas. O uso é simples substituição de string comorename .sql .php *.sql
Você também pode usar uma linha de base do bash para processar cada arquivo, um de cada vez:
$ for f in *.sql; do mv -i "$f" "${f%%.*}.php"; done
rename
função (isto é, busybox)Há
rename(1)
, que não usa expressões regulares, mas pode resolver seu problema:Há também
mmv(1)
, mas não estou familiarizado com o funcionamento.fonte
/usr/bin/rename
links são/usr/bin/prename
por padrão, o que leva regexps.G'day,
Você também pode tentar entrar
Ou, para fazê-lo usar a expressão regular, altere-a ligeiramente para
para se divertir um pouco com a codificação de shell. (-:
fonte
ls
deve analisar a saída .sed
exemplo é bastante bom, no entanto.Sendo um encanador, eu gosto de canos :)
Nota: esta resposta é detalhada - como uma novata, agradeço quando alguém que sabe dedica algum tempo para explicar, por isso estou pagando 'adiante'. Se você não é um novato, desculpe o comprimento e a verbosidade.
Onde:
lista todos os arquivos que correspondem ao padrão; nesse caso, estou procurando arquivos com a data no nome do arquivo no formato 'AAAAMMDD'
^ 1: 1º grupo de captura - o nome do arquivo inteiro
^ 2: 2º grupo de captura - a 1ª parte do padrão de nome de arquivo
^ 3: 3º grupo de captura - a 2ª parte do nome do arquivo - aqui, a data como 'AAAAMMDD'
^ 4: 4º grupo de captura - parte opcional do nome do arquivo entre a data e a extensão e a própria extensão
Tããããão .... se eu tiver um arquivo chamado
...então
na verdade significa
Observe que a saída do comando sed é canalizada para 'bash' para executá-lo. Para ver primeiro o arquivo proposto se move SEM realmente movê-los, remova primeiro o '| bash 'no final e tente assim:
Isso não fará nenhuma alteração, mas você verá o comando que será executado SE você executá-lo com '| bash 'marcado com a etiqueta no final.
Isso é útil porque você pode criar qualquer subdiretório desejado a partir de partes no nome do arquivo ou qualquer outra coisa que você adicionar ao texto 'substituto' no comando sed. Note que o sed requer muitos caracteres de escape.
Suportes Regex SED:
(...) exigem escape para agrupamento de capturas -> \ (... \)
{m, n} exige escape para quantificar o objeto anterior -> \ {m, n \}
/ requer escape na cadeia de substituição -> \ /
[...] NÃO requer escape para classes de personagens
\ 1 na cadeia de substituição refere-se ao primeiro grupo capturado e assim por diante ...
AVISO DE SEGURANÇA: NUNCA TUBE QUALQUER COISA PARA 'FAZER', A menos que você entenda totalmente o resultado ...
Espero que ajude a eliminar alguns bloqueios :)
fonte
Instale
mmv
e faça o seguinte:fonte