Como faço para excluir um diretório pelo nome usando encontrar? -- bash campo com find camp askubuntu Relacionado O problema

How do I exclude a directory by name using find?


7
vote

problema

português

Eu tenho muitos diretórios no meu sistema, com uma estrutura parecendo assim:

  example.com/about.php0   

Quando eu quiser encontrar um determinado diretório, basta digitar example.com/about.php1 mas como posso encontrar um diretório excluindo certas correspondências de nome?

Algo como este no mysql example.com/about.php2

english

I have a lot of directories on my system, with a structure looking like this:

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

When I want find a certain directory, I just type find . -iname "002abc*" but how can I find a directory excluding certain name matches?

Something like this in MySQL select * from folder where filename != '0021bc'

     

Lista de respostas

9
 
vote
vote
Melhor resposta
 

Use # The loopback interface auto lo iface lo inet loopback # Configuration for eth0 and aliases # This line ensures that the interface will be brought up during boot. auto eth0 eth0:0 eth0:1 # eth0 - This is the main IP address that will be used for most outbound connections. # The address, netmask and gateway are all necessary. iface eth0 inet static address 12.34.56.78 netmask 255.255.255.0 gateway 12.34.56.1 # eth0:0 # This is a second public IP address. iface eth0:0 inet static address 34.56.78.90 netmask 255.255.255.0 # eth0:1 - Private IPs have no gateway (they are not publicly routable) # so all you need to specify is the address and netmask. iface eth0:1 inet static address 192.168.133.234 netmask 255.255.128.0 5 em um comando # The loopback interface auto lo iface lo inet loopback # Configuration for eth0 and aliases # This line ensures that the interface will be brought up during boot. auto eth0 eth0:0 eth0:1 # eth0 - This is the main IP address that will be used for most outbound connections. # The address, netmask and gateway are all necessary. iface eth0 inet static address 12.34.56.78 netmask 255.255.255.0 gateway 12.34.56.1 # eth0:0 # This is a second public IP address. iface eth0:0 inet static address 34.56.78.90 netmask 255.255.255.0 # eth0:1 - Private IPs have no gateway (they are not publicly routable) # so all you need to specify is the address and netmask. iface eth0:1 inet static address 192.168.133.234 netmask 255.255.128.0 6 para negar (inverter) a opção após. No seu caso:

   # The loopback interface auto lo iface lo inet loopback   # Configuration for eth0 and aliases   # This line ensures that the interface will be brought up during boot.   auto eth0 eth0:0 eth0:1   # eth0 - This is the main IP address that will be used for most outbound connections.  # The address, netmask and gateway are all necessary.   iface eth0 inet static   address 12.34.56.78   netmask 255.255.255.0   gateway 12.34.56.1   # eth0:0  # This is a second public IP address.  iface eth0:0 inet static   address 34.56.78.90   netmask 255.255.255.0   # eth0:1 - Private IPs have no gateway (they are not publicly routable)  # so all you need to specify is the address and netmask.  iface eth0:1 inet static   address 192.168.133.234   netmask 255.255.128.0 7   

e opcionalmente, apenas pastas correspondentes:

   # The loopback interface auto lo iface lo inet loopback   # Configuration for eth0 and aliases   # This line ensures that the interface will be brought up during boot.   auto eth0 eth0:0 eth0:1   # eth0 - This is the main IP address that will be used for most outbound connections.  # The address, netmask and gateway are all necessary.   iface eth0 inet static   address 12.34.56.78   netmask 255.255.255.0   gateway 12.34.56.1   # eth0:0  # This is a second public IP address.  iface eth0:0 inet static   address 34.56.78.90   netmask 255.255.255.0   # eth0:1 - Private IPs have no gateway (they are not publicly routable)  # so all you need to specify is the address and netmask.  iface eth0:1 inet static   address 192.168.133.234   netmask 255.255.128.0 8   

Listará todas as pastas, exceto as nomeadas correspondentes ao padrão # The loopback interface auto lo iface lo inet loopback # Configuration for eth0 and aliases # This line ensures that the interface will be brought up during boot. auto eth0 eth0:0 eth0:1 # eth0 - This is the main IP address that will be used for most outbound connections. # The address, netmask and gateway are all necessary. iface eth0 inet static address 12.34.56.78 netmask 255.255.255.0 gateway 12.34.56.1 # eth0:0 # This is a second public IP address. iface eth0:0 inet static address 34.56.78.90 netmask 255.255.255.0 # eth0:1 - Private IPs have no gateway (they are not publicly routable) # so all you need to specify is the address and netmask. iface eth0:1 inet static address 192.168.133.234 netmask 255.255.128.0 9 .

o eth0:10 pode ser problemático em shell script Às vezes, então como flimm apontado , o parâmetro abcdefghijklmn21 é um sinônimo muito útil para ele.

 

Use ! in a find command to negate (invert) the option following after. In your case:

find . ! -iname "002abc*" 

and optionally, only matching folders:

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

will list all folders except the ones named matching the pattern 002abc*.

The ! can be problematic in shell scripting sometimes, so as Flimm pointed out, the -not parameter is a very useful synonym to it.

 
 
   
   
1
 
vote

Você pode encontrar "todas as pastas" e, em seguida, selecionar o que você 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 a instrução Sequencial Grep -V ou uma egrep.

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

ou

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

Você terá que sintonizar o que você quer, e estou feliz em iterar. Se você ler a página do homem para encontrar, você encontrará muitos sinalizadores para classificar para arquivos e pastas também.

 

You can find "all" folders and then select out the one you don't want with grep -v (or egrep for that matter)

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

If you want to select out more than one name, you can use sequential grep -v or one egrep statement.

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

or

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

You'll have to tune it to what you want, and I'm happy to iterate. If you read the man page for find, you'll find lots of flags to sort for files and folders, too.

 
 
1
 
vote
  find -name 0021bc -prune -o -print    
 
find -name 0021bc -prune -o -print 
 
 

Perguntas relacionadas

44  Encontre o arquivo mais recente por data modificada  ( Find the latest file by modified date ) 
se eu quiser encontrar o arquivo mais recente (mtime) em um diretório (grande) contendo subdiretórios, como eu faria isso? Lotes de postagens que eu encon...

9  Tirando linhas de "acesso negado"  ( Taking out access denied lines ) 
Quando eu uso find para ver todos os arquivos PDF no diretório /home , estou vendo access denied . Para eliminá-los, tentei: find /home -iname "*.pdf" ...

1  Bash: arquivo não encontrado  ( Bash file not found ) 
Está tudo na captura de tela abaixo ...

12  Como posso encontrar todos os arquivos de vídeo no meu sistema?  ( How can i find all video files on my system ) 
Eu tentei usar a pesquisa de arquivos de lente de unidade para *.* e filtragem por último modificado = tudo, digite = videos, e tamanho = tudo, mas não enco...

1  Criando um diretório de arquivos criados recentemente  ( Creating a directory of recently created files ) 
Em um sistema que eu tenho, os arquivos são carregados por meio de uma série de vários mecanismos em um diretório "recebendo" central. Uma vez por dia, esses ...

1  Eu usei o comando Localizar sem especificar um diretório  ( I used the find command without specifying a directory ) 
Eu usei este comando sem especificar um diretório: sudo find -type d -exec chmod 755 {} O que poderia ter acontecido? Eu estava na pasta / var / www /...

1  Obtenha uma utilização de disco por tipo de arquivo?  ( Get disk utilization by file type ) 
Existe uma maneira de obter uma quebra de uma utilização de disco (ou diretório) com base no tipo de arquivo na linha de comando? Eu acho que eu poderia esc...

2  A mtime de um diretório pode ser mais antiga que a do arquivo dentro?  ( Can a directorys mtime be older than that of file inside ) 
Eu tenho essa pergunta muito boba e muito básica, mas eu pensei melhor perguntar antes de começar a podar minha NAS. Eu quero excluir todos os diretórios no...

34  encontrar vs. localize  ( Find vs locate ) 
Existem os comandos find e locate para procurar arquivos no disco. Eu sei que find Recursivamente processa todos os subdiretórios necessários para pes...

32  Como encontrar arquivos entre duas datas usando "Localizar"?  ( How to find files between two dates using find ) 
Eu tenho uma conta de e-mail que passou por 60 GB de e-mails, e atualmente estou tendo muitos problemas usando um cliente de e-mail para arquivar e-mails do a...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.