Altera apenas a extensão de um arquivo [duplicado]

9

Estou trabalhando em um script de shell simples para alterar um arquivo one.PDF to one.pdf . Eu tenho esse arquivo armazenado em uma pasta chamada Task1.

Meu script está no mesmo diretório da Tarefa1. Chamado Shell1.sh Quando eu executo, o Task1 se torna Task1.pdf, mas o arquivo dentro do one.PDF não muda. Eu preciso do contrário, mas nada que eu tente parece funcionar Eu continuo alternando entre um erro de sintaxe, não sendo capaz de mover porque um recurso está ocupado ou apenas renomeando o diretório.

Alguém pode me dizer o que estou fazendo errado?

#!/bin/bash
#shebang for bourne shell execution
echo "Hello this is task 1"
 #Initial prompt used for testing to see if script ran
#/rename .* .pdf *.pdf // doesnt work

#loop to iterate through each file in current directory and rename
for file in Task1;
do
        mv "$file" "${file%.PDF}.pdf"
done
    
por Callat 24.01.2017 / 06:54

3 respostas

16

Use globbing para obter os nomes dos arquivos:

for file in Task1/*; do mv ...; done

Para precisão, corresponda apenas aos arquivos que terminam em .PDF :

for file in Task1/*.PDF; do mv ...; done

Mais preciso, verifique se estamos lidando com arquivos, não com diretórios:

for file in Task1/*.PDF; do [ -f "$file" ] && mv ...; done

Como observação, seu padrão de expansão de parâmetros é bom.

    
por 24.01.2017 / 06:59
4

Além dos comandos básicos do shell, na maioria das distribuições do Lunux existe uma boa ferramenta rename que pode fazer o trabalho de renomear múltiplos arquivos em um único comando:

rename 's/PDF/pdf/' Task1/*

Aqui está um bom artigo sobre isso: Renomear - uma ferramenta de linha de comando para renomear vários arquivos no Linux .

    
por 24.01.2017 / 09:35
1

Se a distribuição rename da sua distribuição for o comando C do util-linux (por exemplo, Arch Linux):

rename PDF pdf Task1/*PDF

Isso funcionará, a menos que seus arquivos PDF contenham a string "PDF" em algum lugar diferente do final, por exemplo, example_PDF_file.PDF .

    
por 24.01.2017 / 21:21