Como ordenar lista de arquivos, que possuem os mesmos nomes, mas extensões diferentes

1

Eu tenho uma pasta com os arquivos .doc e .pdf . Alguns deles têm o mesmo nome, por exemplo, test.doc e test.pdf . Desejo classificar a pasta para reter apenas as versões .doc (se houver duplicatas na verdade), pois as versões .pdf não são mais necessárias

    
por lenovo1986 20.10.2015 / 13:52

4 respostas

1

mkdir -p PDF
for f in *.pdf ; do
    bn=$(basename -- "$f" .pdf)
    [ -e "$bn.doc" ] && mv -- "$f" PDF/
done

Deixo a você rm -rf PDF/ - eu gosto de deixar o passo irrevogável o mais tarde possível em qualquer procedimento potencialmente arriscado.

Se você preferir ir em frente e excluí-los, então:

for f in *.pdf ; do
    [ -e "$(basename -- "$f" .pdf).doc" ] && rm -f -- "$f"
done

Esta versão não se preocupa em configurar a variável intermediária "$ bn" - de qualquer maneira funciona ... a primeira é mais "legível" e também é melhor se você tiver outros usos para o nome da base do arquivo.

    
por 20.10.2015 / 14:03
0

Tente

for i in 'ls | awk '{print $1}' | cut -d'.' -f1 | uniq -d'
do
   rm -r $PWD/$i".pdf"
done

Aviso: o nome do arquivo deve conter apenas um ponto (.) (ou seja,) nome do arquivo.extensão e deve ser executado no mesmo diretório se você estiver executando o mesmo trecho.

    
por 20.10.2015 / 14:35
0

Não faz sentido "classificar" uma pasta para remover arquivos. Você pode classificar por nomes de arquivos com ls -bU | sort ou pode processar a lista para remover arquivos indesejados.

  1. Exclua todos os arquivos PDF para os quais há um DOC

    for d in *.doc; do p="${d/%.doc/.pdf}"; test -f "$p" && rm -f "$p"; done
    
  2. Excluir todos os arquivos PDF

    rm -f *.pdf
    

Ambas as variantes manipulam nomes de arquivos com espaços e outros caracteres estranhos neles. Você pode testar as soluções substituindo rm por echo rm .

    
por 20.10.2015 / 17:04
0

com zsh :

doc_base=(*.doc(:r)) && rm -f -- $^doc_base.pdf

Ou:

setopt histsubstpattern # could go in ~/.zshrc
rm -f -- *.doc(:s/%doc/pdf)

Para remover todos os arquivos pdf, desde que haja um arquivo com o mesmo nome de base, mas diferente (doc ou outro):

setopt histsubstpattern extendedglob
rm -f -- *.*~*.pdf(:r:s/%/pdf)
    
por 20.10.2015 / 17:19

Tags