Dados os seguintes arquivos:
english_api
english_overview
style.css
Eu quero obter:
english_api.html
english_overview.html
style.css
Em outras palavras, como acrescentar um texto a todos os arquivos que não contêm um ponto ( .
) em um diretório usando o terminal.
Obviamente, existem muitos arquivos nessa pasta; Eu acabei de escrever 3 como um exemplo.
Se eu fosse, digamos, substitua .css
por .html
nessa pasta, eu usaria:
rename .css .html *.css
Mas não consigo realmente pensar em uma maneira de combinar arquivos que não contêm algo. Também como acrescentar (vs substituir) usando o rename
comando?
fonte
for file in path/to/files/!(*.*); do echo mv "$file" "$file.html"; done
O comando renomeia os diretórios também.O meu preferido em casos como este é
mmv
. Não é instalado por padrão no Ubuntu, mas você pode instalar usando osudo apt-get install mmv
comandoNo seu caso, você precisa usá-lo duas vezes:
Renomeie todos os arquivos do diretório atual adicionando
.html
no final de cada nome de arquivo:Renomeie novamente (voltar) todos os arquivos que tinham anteriormente em seus nomes um ou mais
.
(pontos):Ou, em uma linha:
-v
opção não é obrigatória. Eu o uso apenas para uma saída detalhada, porque sem elemmv
executa ações silenciosamente.Veja
man mmv
para mais informações.fonte
Com o comando Perl rename (
prename
), você pode adicionar uma condição de que o nome do arquivo deve conter um ponto. Se o snippet Perl não alterar o nome de um arquivo, ele permanecerá intocado. Aqui estão algumas maneiras de escrever isso:fonte
As respostas são perfeitas, eu também lhe dou outro comando que faz este trabalho:
Alguma explicação:
NOTA :
Eu tento o seu cenário e o comando faz o trabalho.
fonte
ls
.awk
esh
, tente algo comoprintf "'%s'\n" -- !(*.*) | awk '{print "mv -- "$0" "$0".html"}' | sh
. Isso ainda será interrompido nos nomes de arquivos com novas linhas, mas pelo menos poderá lidar com espaços. O--
é necessário para casos onde você tem os nomes de arquivos que começam com-
.