Automatizar um script bash de arquivos renomeados

3

Eu tenho muitos documentos na minha unidade com a extensão .odt. Exemplo:

Noentanto,achoqueo.odtdistraiquandonavegapormuitosdocumentos.

Então,euconseguiescreverestescript(removeODT.sh):

#!/bin/bashforfilein*.odtdomv"$file" "${file%.odt}"
done

Que remove a extensão .odt dos arquivos .odt no diretório em que eu executo o script.

por exemplo. Abra o terminal em ~ / Desktop / MyDocuments e digite

sh /home/user1/BashScripts/removeODT.sh

Isso remove a extensão .odt de todos os arquivos em MeusDocumentos.

Mas depois de remover a extensão, não consigo usar os arquivos em outros sistemas operacionais e também não consigo pesquisar o conteúdo do documento com loook .

Para corrigir isso, criei um segundo script para adicionar a extensão .odt novamente quando necessário (addODT.sh):

#!/bin/bash

for file in *
do
 mv "$file" "${file%}.odt"
done

Agora, o que eu gostaria de fazer é fazer com que esses scripts alterem todos os documentos no diretório pai especificado e em todos os seus subdiretórios, em vez de apenas um único diretório, como fazem agora.

por exemplo. "Remover extensões .odt dos arquivos em Documentos e todas as suas subpastas"

Isso permitiria que eu alterasse todos os meus arquivos com um único script sem ter que executar o script para cada pasta separadamente. Mas sou muito novo nisso, então não tenho ideia de como fazer isso.

P.S. Uma solução ideal seria ocultar a extensão .odt no Nautilus, mas, até onde eu saiba, não é possível.

    
por Rtsne42 03.10.2016 / 18:42

1 resposta

7

Você pode usar find para percorrer diretórios de forma recursiva.

find -type f -exec mv {} {}.odt \;

Remover a extensão é mais problemático:

find -name '*.odt' -exec bash -c 'f={}; mv "$f" "${f%.odt}"' \;

Mas você também pode criar um script para remover a extensão e chamá-la de "Localizar" para simplificar:

find -name '*.odt' -exec remove_odt.sh {} \;

Como você pode imaginar, {} será substituído pelo nome de cada arquivo com exec , a% final\; diz onde o comando a ser executado termina.

Além disso, não use sh para executar bash scripts, sh e bash são diferentes bestas.

    
por choroba 03.10.2016 / 18:48