Como eu excluo um diretório pelo nome usando find?

7

Eu tenho muitos diretórios no meu sistema, com uma estrutura parecida com esta:

\-----data
       \------- 001abc
       \------- 002abc
       \------- 003abc
       \------- 004abc
       \------- 005abc
       \ ....

Quando quero encontrar um determinado diretório, basta digitar find . -iname "002abc*" , mas como posso encontrar um diretório excluindo certas correspondências de nomes?

Algo parecido com isso no MySQL select * from folder where filename != '0021bc'

    
por Egy Mohammad Erdin 15.01.2013 / 15:12

3 respostas

7

Use ! em um comando find para negar (inverter) a opção seguinte. No seu caso:

find . ! -iname "002abc*"

e, opcionalmente, apenas pastas correspondentes:

find . ! -iname "002abc*" -type d

listará todas as pastas, exceto aquelas nomeadas que correspondem ao padrão 002abc* .

O ! pode ser problemático em scripts de shell, então como Flimm apontou , o parâmetro -not é um sinônimo muito útil para ele.

    
por gertvdijk 15.01.2013 / 15:25
2
find -name 0021bc -prune -o -print
    
por Steven Penny 23.06.2014 / 01:44
1

Você pode encontrar "todas" pastas e, em seguida, selecionar aquela que não deseja com grep -v (ou egrep para esse assunto)

find . -iname "abc*" | grep -v 002

Se você quiser selecionar mais de um nome, você pode usar grep sequencial -v ou uma instrução egrep.

find . -iname "abc*" | grep -v 002 | grep -v 003

ou

find . -iname "abc*" | egrep -v "002|003"

Você precisará ajustá-lo ao que deseja e fico feliz em interagir. Se você ler a página de manual para encontrar, também encontrará muitos sinalizadores para classificar arquivos e pastas.

    
por philshem 15.01.2013 / 15:22

Tags