Exclui todos os arquivos para os quais não exista nenhum arquivo correspondente com outro ramal

2

Meu objetivo é encontrar uma sequência de comandos do Linux, que exclua alguns arquivos se uma condição especial for cumprida:

Todos os arquivos com as extensões .cut ou .cut.bak no diretório atual devem ser removidos, SE não houver arquivo com o mesmo nome, mas a extensão .rec ou .mpg no diretório atual.

Antecedentes: Estou desenvolvendo uma ferramenta para um PVR baseado em Linux, que permite o corte de programas gravados. Para cada gravação (extensão .rec ou .mpg ), os marcadores de segmento são armazenados em um arquivo .cut com o mesmo nome. Quando alguma gravação é movida / renomeada / apagada, o arquivo correspondente permanece órfão e deve ser excluído. Eu já implementei a remoção desses arquivos cortados inúteis em C. Mas eu estou pensando, se pode haver uma solução baseada em um sistema (simples). Neste caso, poderia ser executado via 'system' e & em segundo plano, o que tornaria meu aplicativo mais responsivo ...

Já fiz uma pergunta semelhante para o caso recursivo (navegando também em subdiretórios), aqui . Houve uma resposta (quase) perfeita pelo kos - mas infelizmente ele remove muitos arquivos, então não é utilizável, e eu não consegui descobrir ... Mas a mesma ideia pode ser usada aqui, se for possível analisar e canalizar o resultado de 'ls' linewise ...

    
por chris86 07.07.2015 / 23:45

1 resposta

2

Assim?

for f in *.cut *.cut.bak
do
    [ -e "$f" ] || continue
    f="${f%%.bak}"
    f="${f%%.cut}"
    [ -e "$f".mpg ] || [ -e "$f".rec ] || rm -i -- "$f".cut "$f".cut.bak
done
    
por 08.07.2015 / 01:20