Tenho alguns diretórios e subdiretórios contendo arquivos sem extensão de arquivo. Quero adicionar .jpg
a todos os arquivos contidos nesses diretórios. Já vi scripts bash para alterar a extensão do arquivo, mas não apenas para adicionar um. Também precisa ser recursivo, alguém pode ajudar por favor?
bash
file
shell
command-line
file-extension
Robjmills
fonte
fonte
for
bash perturbador de loop para iterar sobre uma lista de arquivos, isso não está correto. Ofor
loop bash emite iterativamente cadamv
comando.find
Primeiro configura uma lista de arquivos antes de executar a-exec
instrução? Acho que sim, mas quero deixar este ponto claro antes de codificar loops infinitos.-not -name "*.*"
fará o truque.isso encontrará arquivos sem extensão e adicionará seu .jpg
fonte
É um pouco tarde, mas pensei em acrescentar que uma solução melhor (embora talvez menos legível) do que as até agora poderia ser:
Usar o
find | xargs
padrão geralmente resulta em uma execução mais eficiente, pois você não precisa bifurcar um novo processo para cada arquivo.Observe que isso requer a versão de renomear encontrada em distros com o sabor do Debian (também conhecida como prename), ao invés da renomeação tradicional. É apenas um pequeno script perl, portanto, seria fácil o suficiente para usar o comando acima em qualquer sistema.
fonte
como isso,
Não estou esperando que você tenha nomes de arquivos separados por espaço,
Se os tiver, os nomes precisarão ser processados um pouco.
Se você deseja executar o comando de algum outro diretório,
pode substituir o
find .
porfind /target/directory
.fonte
-type
.Para renomear todos os arquivos sem extensão no Windows Basic, você pode fazer uma
ren * *.jpg
vez que o arquivo não tem extensão, basta usar o *, ou se você quiser mudar o png para jpg useren *.png *.jpg
fonte
rename
não tenho certeza de que pode renomear arquivos sem extensões (estou no Windows 7 agora)
fonte
rename
, um programa C incluído no util-linux-ng e um programa Perl (pelo próprio Wall) nas máquinas Debian de nossa universidade. Na verdade, nenhum dos dois faz recursão.