Despachando arquivos para diretórios usando correspondência de padrões de nome

0

Considere:

$ ls
about-bar   about-bar.pdf   about-foo   about-fou.pdf
$ for f in *about-*.pdf; do mv "$f" "$(echo $f | sed -E 's:(about-.*).pdf::')";done
$ find .
.
./about-bar
./about-bar/about-bar.pdf
./about-foo
./about-fou

Qual seria uma maneira eficiente de pular arquivos que não têm um diretório correspondente? Nesse caso, apenas about-bar.pdf seria movido e about-fou.pdf não seria renomeado (especificamente, .pdf stripped).

Obrigado.

    
por Erwann 15.07.2016 / 03:42

1 resposta

3

Não sed necessário aqui; podemos usar a expressão padrão bash de ${file%.pdf} para remover a extensão .pdf

$ ls
about-bar/  about-bar.pdf  about-foo/  about-fou.pdf

$ for a in *.pdf
> do
>   dir=${a%.pdf}
>   if [ -d "$dir" ]
>   then
>     mv -i "$a" "$dir"
>   fi
> done

$ ls
about-bar/  about-foo/  about-fou.pdf

$ ls *
about-fou.pdf

about-bar:
about-bar.pdf

about-foo:
    
por 15.07.2016 / 04:06

Tags