Comando find do Linux
Nos sistemas operacionais do tipo Unix, o comando find procura arquivos e diretórios em um sistema de arquivos .
Este documento cobre a versão GNU / Linux do find .
Descrição
find localiza arquivos no seu sistema. Dentro de cada árvore de diretório especificada pelo caminho especificado, ele avalia a expressão especificada da esquerda para a direita, de acordo com as regras de precedência (consulte ” Operadores “, abaixo) até que o resultado seja conhecido. O resultado é “conhecido” quando o lado esquerdo da expressão é determinado como FALSE para operações AND ou TRUE para operações OR. Nesse ponto, encontre move-se para o próximo caminho até que todos os caminhos tenham sido pesquisados.
O find é uma ferramenta fundamental e extremamente poderosa para trabalhar com os arquivos do seu sistema Linux. Ele pode ser usado sozinho para localizar arquivos ou em conjunto com outros programas para executar operações nesses arquivos.
Sintaxe
encontre [-H] [-L] [-P] [-D depura ] [-O level ] [ caminho ...] [ expressão ]
Opções
As opções -H , -L e -P controlam o tratamento de links simbólicos . Os argumentos a seguir são considerados nomes de arquivos ou diretórios a serem examinados, até o primeiro argumento que começa com ” – ” ou o argumento ” ( ” ou ” ! “.) Esse argumento e os argumentos a seguir são considerados os expressão que descreve o que está sendo pesquisado. Se nenhum caminho for especificado, o diretório atual será usado. Se nenhuma expressão for fornecida, a expressão -print será usada (mas você provavelmente deve considerar usar -print0 de qualquer maneira. Mais informações sobre isso abaixo )
Os argumentos na lista de expressões também são chamados de “opções”, mas as cinco opções “reais” -H , -L , -P , -D e -O devem aparecer antes do primeiro nome do caminho, se forem usadas. . Um traço duplo (” – “) também pode ser usado para sinalizar que os argumentos restantes não são opções (embora garantir que todos os pontos de partida comecem com ” ./ ” ou ” / ” é geralmente mais seguro se você usar caracteres curinga no lista de pontos de partida).
-P | Nunca siga links simbólicos. Esse é o padrão. Quando localizar examina ou imprime informações em um arquivo e o arquivo é um link simbólico, as informações usadas serão obtidas das propriedades do próprio link simbólico. |
-EU | Siga os links simbólicos. Quando localizar examina ou imprime informações sobre arquivos, as informações usadas serão obtidas das propriedades do arquivo para as quais o link aponta, não do próprio link (a menos que seja um link simbólico quebrado ou a localização não consiga examinar o arquivo para o qual os pontos de link). O uso desta opção implica -noleaf . Se você mais tarde usar a opção -P , o -noleaf ainda estará em vigor. Se -L estiver em vigor e o find descobrir um link simbólico para um subdiretório durante sua pesquisa, o subdiretório apontado pelo link simbólico será pesquisado. Quando a opção -L estiver em vigor, o predicado -type sempre corresponderá ao tipo de arquivo ao qual um link simbólico aponta e não ao próprio link (a menos que o link simbólico esteja quebrado). O uso de -L faz com que os predicados -lname e -ilname sempre retornem false. |
-H | Não siga os links simbólicos, exceto durante o processamento dos argumentos da linha de comandos. Quando localizar examina ou imprime informações sobre arquivos, as informações usadas serão obtidas das propriedades do próprio link simbólico. A única exceção a esse comportamento é quando um arquivo especificado na linha de comando é um link simbólico e o link pode ser resolvido. Para essa situação, as informações usadas são obtidas de qualquer ponto para o qual o link aponta (ou seja, o link é seguido). As informações sobre o próprio link são usadas como fallback se o arquivo apontado pelo link simbólico não puder ser examinado. Se -H estiver em vigor e um dos caminhos especificados na linha de comandos for um link simbólico para um diretório, o conteúdo desse diretório será examinado (embora a especificação de -maxdepth 0 impeça isso). |
Se mais de um de -H , -L e -P for especificado, cada um substituirá os outros; o último que aparece na linha de comando entra em vigor. Como é o padrão, a opção -P deve ser considerada em vigor, a menos que -H ou -L seja especificado. O GNU encontra frequentemente os arquivos stat durante o processamento da própria linha de comando, antes de qualquer pesquisa começar. Essas opções também afetam como esses argumentos são processados. Especificamente, existem vários testes que comparam os arquivos listados na linha de comando com um arquivo que estamos considerando no momento. Em cada caso, o arquivo especificado na linha de comando será examinado e algumas de suas propriedades serão salvas. Se o arquivo nomeado é de fato um link simbólico e a opção -P está em vigor (ou se -H nem -L foram especificados), as informações usadas para a comparação serão obtidas das propriedades do link simbólico. Caso contrário, ele será retirado das propriedades do arquivo para o qual o link aponta. Se a localização não puder seguir o link (por exemplo, porque ele possui privilégios insuficientes ou o link aponta para um arquivo inexistente), as propriedades do próprio link serão usadas.
Quando as opções -H ou -L estiverem em vigor, quaisquer links simbólicos listados como argumento de -newer serão desreferenciados e o registro de data e hora será retirado do arquivo para o qual o link simbólico aponta. A mesma consideração se aplica a -newerXY , -anewer e -cnewer .
A opção -follow tem um efeito semelhante a -L , embora tenha efeito no ponto em que aparece (ou seja, se -L não for usado, mas -follow , quaisquer links simbólicos que apareçam após -follow na linha de comando serão desreferenciados, e aqueles que antes não serão).
-D debugoptions | Imprimir informações de diagnóstico; isso pode ser útil para diagnosticar problemas com o motivo pelo qual a localização não está fazendo o que você deseja. A lista de opções de depuração deve ser separada por vírgula. A compatibilidade das opções de depuração não é garantida entre os lançamentos do findutils . Para obter uma lista completa das opções de depuração válidas, consulte a saída da ajuda find -D . As opções de depuração válidas incluem:
| ||||||||||
-O nível | Ativa a otimização de consultas . O programa find reordena os testes para acelerar a execução, preservando o efeito geral; isto é, predicados com efeitos colaterais não são reordenados um em relação ao outro. As otimizações executadas em cada nível de otimização são as seguintes. Não deve haver um espaço entre -O e o decimal representando o nível de otimização. Os decimais e seus significados são os seguintes:
O otimizador baseado em custos tem uma idéia fixa da probabilidade de um determinado teste ser bem-sucedido. Em alguns casos, a probabilidade leva em consideração a natureza específica do teste (por exemplo, presume-se que o tipo f é mais provável que seja bem-sucedido que o tipo c ). O otimizador baseado em custos está sendo avaliado no momento. Se ele não melhorar o desempenho da localização , será removido novamente. Por outro lado, otimizações que provam ser confiáveis, robustas e eficazes podem ser ativadas em níveis mais baixos de otimização ao longo do tempo. No entanto, o comportamento padrão (ou seja, nível de otimização 1) não será alterado na série de versões 4.3.x. O conjunto de testes findutils executa todos os testes encontrados em cada nível de otimização e garante que o resultado seja o mesmo. |
Expressões
A expressão é composta de opções (que afetam a operação geral em vez do processamento de um arquivo específico e sempre retornam verdadeiro ), testes (que retornam um valor verdadeiro ou falso ) e ações (que têm efeitos colaterais e retornam um valor verdadeiro ou verdadeiro). valor falso), todos separados por operadores. e é assumido onde o operador é omitido.
Se a expressão não contiver ações além de -une , -print será executada em todos os arquivos para os quais a expressão é verdadeira.
Opções de expressão
Todas as opções sempre retornam verdadeiras. Exceto para -daystart , -follow e -regextype , as opções afetam todos os testes, incluindo os testes especificados antes da opção. Isso ocorre porque as opções são processadas quando a linha de comando é analisada, enquanto os testes não fazem nada até que os arquivos sejam examinados. As opções -daystart , -follow e -regextype são diferentes nesse aspecto e têm efeito apenas nos testes que aparecem mais tarde na linha de comando. Portanto, para maior clareza, é melhor colocá-los no início da expressão. Um aviso será emitido se você não fizer isso.
-d | Um sinônimo para -thp , para compatibilidade com FreeBSD, NetBSD, OpenBSD e MacOS X. |
-daystart | Meça os tempos (para -amin , -atime , -cmin , -ctime , -mmin e -mtime ) desde o início de hoje e não 24 horas atrás. Esta opção afeta apenas os testes que aparecem mais tarde na linha de comando. |
-profundidade | Processe o conteúdo de cada diretório antes do próprio diretório. A ação -delete também implica -pth . |
-Segue | Essa opção é uma maneira antiga de fazer a mesma coisa que -L . Agora está obsoleto; você deve usar a opção -L . Essa opção desreferencia os links simbólicos e implica -noleaf . A opção -follow afeta apenas os testes que aparecem depois na linha de comando. A menos que a opção -H ou -L tenha sido especificada, a posição da opção -follow altera o comportamento do predicado -newer ; todos os arquivos listados como argumento de -newer serão desreferenciados se forem links simbólicos. A mesma consideração se aplica a -newerXY , -anewer e -cnewer . Da mesma forma, o predicado -type sempre corresponderá ao tipo de arquivo ao qual um link simbólico aponta, em vez do próprio link. O uso de -follow faz com que os predicados -lname e -ilname sempre retornem false . |
-help , –help | Imprima uma mensagem de ajuda e saia. |
-ignore_readdir_race | Normalmente, o find fornece uma mensagem de erro quando não pode declarar um arquivo. Se você der essa opção e um arquivo for excluído entre o horário em que a localização lê o nome do arquivo no diretório e o horário em que ele tenta estatisticamente, o arquivo não será emitido. Isso também se aplica aos caminhos fornecidos na linha de comando. Esta opção entra em vigor no momento em que a linha de comandos é lida, o que significa que você não pode procurar uma parte do sistema de arquivos com esta opção ativada e parte dele com esta opção desativada. |
-níveis de profundidade máximos | Desça na maioria dos níveis (um número inteiro não negativo) dos diretórios abaixo dos argumentos da linha de comando. -maxdepth 0 significa aplicar apenas os testes e ações aos caminhos especificados na linha de comandos e não desce em subdiretórios. |
níveis de profundidade | Não aplique nenhum teste ou ação em níveis inferiores aos níveis (um número inteiro não negativo). -mindepth 1 significa processar todos os arquivos, exceto os argumentos da linha de comando. |
-mount | Não desça diretórios em outros sistemas de arquivos . Um nome alternativo para -xdev . Esta opção é fornecida para compatibilidade com algumas outras versões do find . |
-noignore_readdir_race | Desativa o efeito de -ignore_readdir_race . |
-noleaf | Não otimize assumindo que os diretórios contenham 2 subdiretórios a menos do que a contagem de links físicos. Essa opção é necessária ao pesquisar sistemas de arquivos que não seguem a convenção de link de diretório do Unix, como sistemas de arquivos CD-ROM ou MS-DOS ou pontos de montagem de volume do AFS. Cada diretório em um sistema de arquivos Unix normal possui pelo menos 2 links físicos : seu nome e seu ‘ . ‘entry. Além disso, seus subdiretórios (se houver) possuem uma entrada ‘ .. ‘ vinculada a esse diretório. Quando find está examinando um diretório, depois de declarar 2 subdiretórios a menos do que a contagem de links do diretório, ele sabe que o restante das entradas no diretório são não-diretórios (arquivos ‘leaf’ na árvore de diretórios). Se apenas os nomes dos arquivos precisam ser examinados, não há necessidade de especificá- los; isso proporciona um aumento significativo na velocidade da pesquisa. Se você estiver usando um sistema de arquivos linux padrão, não precisará usar esta opção. |
-regextype type | Altera a sintaxe da expressão regular entendida pelos testes -regex e -iregex , que ocorrem posteriormente na linha de comandos. Os tipos atualmente implementados são emacs (este é o padrão), posix – awk , posix-basic , posix- egrep e posix-extended . Se você estiver usando um estilo específico de sintaxe de expressão regular, poderá ser necessário especificar esta opção. Caso contrário, deve ser desnecessário. |
-version , –version | Imprima o número da versão de localização e saia. |
-warn , -nowarn | Ative ou desative as mensagens de aviso. Esses avisos se aplicam apenas ao uso da linha de comando, e não a quaisquer condições que possam encontrar ao pesquisar diretórios. O comportamento padrão corresponde a -warn se a entrada padrão for um tty e a -nowarn caso contrário. |
-xdev | Não desça diretórios em outros sistemas de arquivos. |
Testes
Alguns testes, por exemplo -newerXY e -samefile , permitem a comparação entre o arquivo que está sendo examinado no momento e algum arquivo de referência especificado na linha de comando. Quando esses testes são usados, a interpretação do arquivo de referência é determinada pelas opções -H , -L e -P e qualquer -follow anterior, mas o arquivo de referência é examinado apenas uma vez, no momento em que a linha de comando é analisada. Se o arquivo de referência não puder ser examinado (por exemplo, a chamada do sistema stat falhar), uma mensagem de erro será emitida e as saídas serão localizadas com um status diferente de zero.
Onde n é usado como argumento numérico, pode ser especificado como:
+ n | Para maior que n . |
– n | Por menos de n . |
n | Por exatamente n . |
Os testes são os seguintes:
-amin n | Retorna verdadeiro: um arquivo foi acessado pela última vez n minutos atrás. | ||||||||||||||||
-novo arquivo | Retorna true se um arquivo foi acessado pela última vez mais recentemente que o arquivo foi modificado. Se o arquivo for um link simbólico e a opção -H ou -L estiver em vigor, sempre será usado o tempo de acesso ao arquivo para o qual ele aponta. | ||||||||||||||||
-atime n | Retorna true se um arquivo foi acessado pela última vez n * 24 horas atrás. Quando descobrir quantos períodos de 24 horas atrás o arquivo foi acessado pela última vez, qualquer parte fracionária é ignorada; portanto, para corresponder ao tempo +1 , um arquivo deve ter sido acessado há pelo menos dois dias. | ||||||||||||||||
-cmin n | Retorna true se o status de um arquivo foi alterado pela última vez n minutos atrás. | ||||||||||||||||
-cnewer file | Retorna true se o status de um arquivo foi alterado pela última vez mais recentemente que o arquivo foi modificado. Se o arquivo for um link simbólico e a opção -H ou -L estiver em vigor, o tempo de alteração de status do arquivo para o qual ele aponta será sempre usado. | ||||||||||||||||
-ctime n | Retorna true se o status de um arquivo foi alterado pela última vez n * 24 horas atrás. Consulte os comentários para -atime para entender como o arredondamento afeta a interpretação dos tempos de alteração do status do arquivo. | ||||||||||||||||
-esvaziar | Retorna true se um arquivo estiver vazio (não contém nada) e for um arquivo regular ou um diretório. | ||||||||||||||||
-executável | Corresponde a arquivos executáveis e diretórios pesquisáveis (no sentido da resolução de nomes de arquivos). Isso leva em consideração as listas de controle de acesso e outros artefatos de permissões que o teste -perm ignora. Esse teste faz uso da chamada do sistema de acesso e, portanto, pode ser enganado pelos servidores NFS que fazem o mapeamento de UID (ou remoção de raiz ), pois muitos sistemas implementam o acesso no kernel do cliente e, portanto, não podem usar as informações de mapeamento de UID mantidas em o servidor. Como esse teste é baseado apenas no resultado da chamada do sistema de acesso, não há garantia de que um arquivo para o qual esse teste seja bem-sucedido possa realmente ser executado. | ||||||||||||||||
-falso | Quando usado como parte de uma expressão, -false sempre avalia como falso. | ||||||||||||||||
-fstype type | Retorna true se um arquivo estiver em um sistema de arquivos do tipo Os tipos de sistema de arquivos válidos variam entre diferentes versões do Unix; uma lista incompleta de tipos de sistemas de arquivos aceitos em alguma versão do Unix ou em outra é: ufs , 4.2 , 4.3 , nfs , tmp , mfs , S51K , S52K . Você pode usar -printf com a diretiva % F para ver os tipos de seus sistemas de arquivos. | ||||||||||||||||
-gid n | Retorna true se o ID do grupo numérico de um arquivo for n . | ||||||||||||||||
-group gname | Retorna true se um arquivo pertence ao grupo gname (IDs de grupo numéricos são permitidos). | ||||||||||||||||
padrão -ilname | Como -lname , mas a correspondência não diferencia maiúsculas de minúsculas. Se a opção -L ou a opção -follow estiver em vigor, esse teste retornará false , a menos que o link simbólico esteja quebrado. | ||||||||||||||||
padrão | Como -name , mas a correspondência não diferencia maiúsculas de minúsculas. Por exemplo, os padrões ‘ fo * ‘ e ‘ F ?? ‘corresponde aos nomes dos arquivos’ Foo ‘,’ FOO ‘,’ foo ‘,’ fOo ‘etc. etc. Nesses padrões, diferente da expansão do nome do arquivo pelo shell , uma inicial’ . ‘pode ser correspondido por’ * ‘. Ou seja, a barra find -name * corresponderá ao arquivo ‘ .foobar ‘. Observe que você deve sempre citar padrões, caso contrário, o shell expandirá qualquer caractere curinga neles. | ||||||||||||||||
-inum n | Retorna true se um arquivo tiver o número de inode n . Normalmente, é mais fácil usar o teste -samefile . | ||||||||||||||||
padrão de caminho | Comporta-se da mesma maneira que -iwholename . Esta opção está obsoleta, portanto você não deve mais usá-la. | ||||||||||||||||
padrão -iregex | Como -regex , mas a correspondência não diferencia maiúsculas de minúsculas . | ||||||||||||||||
-iwholename pattern | Como -wholename , mas a correspondência não diferencia maiúsculas de minúsculas. | ||||||||||||||||
-links n | Retorna true se um arquivo tiver n links. | ||||||||||||||||
-lname padrão | Retorna true se um arquivo é um link simbólico cujo conteúdo corresponde ao padrão de padrão de shell. Os metacaracteres não tratam ‘ / ‘ ou ‘ . ‘especialmente. Se a opção -L ou a opção -follow estiver em vigor, esse teste retornará false, a menos que o link simbólico esteja quebrado. | ||||||||||||||||
-mmin n | Retorna true se os dados do arquivo foram modificados pela última vez n minutos atrás. | ||||||||||||||||
-mtime n | Retorna true se os dados de um arquivo foram modificados pela última vez n * 24 horas atrás. Consulte a opção -atime para entender como o arredondamento afeta a interpretação dos tempos de modificação do arquivo. | ||||||||||||||||
-name pattern | Retorna true se a base de um nome de arquivo (o caminho com os diretórios principais removidos) corresponder ao padrão de padrão de shell. Os metacaracteres (‘ * ‘, ‘ ? ‘ E ‘ [] ‘) correspondem a ‘ . ‘no início do nome base. Para ignorar um diretório e os arquivos nele, use -prune ; veja um exemplo na descrição de -path . Os aparelhos não são reconhecidos como especiais, apesar do fato de que algumas conchas, incluindo o bash, imprimem aparelhos com um significado especial nos padrões de conchas. A correspondência do nome do arquivo é realizada com o uso da função de biblioteca fnmatch . Não se esqueça de colocar o padrão entre aspas para protegê-lo da expansão pelo shell. | ||||||||||||||||
-novo arquivo | Retorna true se um arquivo foi modificado mais recentemente que o arquivo . Se o arquivo for um link simbólico e a opção -H ou -L estiver em vigor, o tempo de modificação do arquivo para o qual ele aponta será sempre usado. | ||||||||||||||||
referência -newerXY | Compara o registro de data e hora do arquivo atual com a referência . O argumento de referência normalmente é o nome de um arquivo (e um de seus registros de data e hora é usado para a comparação), mas também pode ser uma string que descreve um tempo absoluto. X e Y são espaços reservados para outras letras, e essas letras selecionam o horário pertencente a como a referência é usada para a comparação.
Algumas combinações são inválidas; por exemplo, é inválido que X seja t . Algumas combinações não são implementadas em todos os sistemas; por exemplo, B não é suportado em todos os sistemas. Se uma combinação inválida ou não suportada de XY for especificada, ocorrerá um erro fatal. As especificações de tempo são interpretadas como para o argumento da opção -d da data do GNU. Se você tentar usar o horário de nascimento de um arquivo de referência e o horário de nascimento não puder ser determinado, uma mensagem de erro fatal será exibida. Se você especificar um teste que se refira à hora de nascimento dos arquivos que estão sendo examinados, esse teste falhará em todos os arquivos em que a hora de nascimento é desconhecida. | ||||||||||||||||
-nogrupo | Retorna ter se nenhum grupo existente corresponder ao ID do grupo numérico do arquivo. | ||||||||||||||||
-nouser | Retorna true se nenhum usuário existente corresponder ao ID do usuário numérico do arquivo. | ||||||||||||||||
-path padrão | Retorna true se o nome de um arquivo corresponder ao padrão de shell. Os metacaracteres não tratam ‘ / ‘ ou ‘ . ‘especialmente; então, por exemplo,encontrar . -caminho "./sr*sc" imprimirá uma entrada para um diretório chamado ‘ ./src/misc ‘ (se houver). Para ignorar uma árvore de diretórios inteira, use -prune em vez de verificar todos os arquivos na árvore. Por exemplo, para pular o diretório ‘ src / emacs ‘ e todos os arquivos e diretórios abaixo dele, e imprimir os nomes dos outros arquivos encontrados, faça algo assim: encontrar . -path ./src/emacs -prune -o -print Observe que o teste de correspondência de padrões se aplica a todo o nome do arquivo, iniciando em um dos pontos de início nomeados na linha de comandos. Só faria sentido usar um nome de caminho absoluto aqui se o ponto inicial relevante também for um caminho absoluto. Isso significa que este comando nunca corresponderá a nada: encontre bar -path / foo / bar / myfile -print O caminho- predicado também é suportado pela localização do HP-UX e estará em uma versão futura do padrão POSIX . | ||||||||||||||||
modo de esperma | Retorna true se os bits de permissão de um arquivo estiverem exatamente no modo ( octal ou simbólico). Como é necessária uma correspondência exata, se você deseja usar este formulário para modos simbólicos, pode ser necessário especificar uma sequência de modos bastante complexa. Por exemplo, -perm g = w corresponderá apenas aos arquivos que possuem o modo 0020 (ou seja, aqueles para os quais a permissão de gravação de grupo é a única permissão definida). É mais provável que você queira usar os formulários ‘ / ‘ ou ‘ – ‘, por exemplo -perm -g = w , que corresponde a qualquer arquivo com permissão de gravação em grupo. | ||||||||||||||||
-perm – mode | Retorna true se todos os bits de permissão do modo estiverem definidos para o arquivo. Os modos simbólicos são aceitos neste formulário e, geralmente, é dessa maneira que você os deseja usar. Você deve especificar ‘ u ‘, ‘ g ‘ ou ‘ o ‘ se usar um modo simbólico. | ||||||||||||||||
-perm / mode | Retorna true se algum dos bits de permissão do modo estiver definido para o arquivo. Os modos simbólicos são aceitos neste formulário. Você deve especificar ‘ u ‘, ‘ g ‘ ou ‘ o ‘ se usar um modo simbólico. Se nenhum bit de permissão no modo estiver definido, esse teste corresponderá a qualquer arquivo. | ||||||||||||||||
-perm + mode | Descontinuada; essa é a maneira antiga de procurar arquivos com qualquer um dos bits de permissão no modo . Você deve usar -perm / mode . Tentar usar a sintaxe ‘ + ‘ com modos simbólicos produzirá resultados inesperados. | ||||||||||||||||
-legível | Corresponde a arquivos legíveis. Isso leva em consideração as listas de controle de acesso e outros fatores de permissão que o teste -perm ignora. Esse teste faz uso da chamada do sistema de acesso e pode ser enganado pelos servidores NFS que fazem o mapeamento de UID (ou esmagamento de raiz), pois muitos sistemas implementam o acesso no kernel do cliente e, portanto, não podem usar as informações de mapeamento de UID mantidas em o servidor. | ||||||||||||||||
-regex padrão | Retorna true se um nome de arquivo corresponder ao padrão de expressão regular . Esta é uma correspondência em todo o caminho, não apenas no nome do arquivo. Por exemplo, para corresponder a um arquivo chamado ‘ ./fubar3 ‘, você pode usar a expressão regular ‘ . * Bar. ‘ou’ . * b. * 3 ‘, mas não’ f. * r3 ‘(porque o caminho completo não começa com um f ). As expressões regulares entendidas por find são, por padrão, expressões regulares do Emacs , mas isso pode ser alterado com a opção -regextype (veja acima). | ||||||||||||||||
– nome do mesmo arquivo | Retorna true se um arquivo se refere ao mesmo inode que o nome . Quando -L está em vigor, isso pode incluir links simbólicos. | ||||||||||||||||
-tamanho [ – | + ] n [ cwbkMG ] | Retorna true se um arquivo usa n unidades de espaço no disco. Se precedido por um sinal de menos (” – “), corresponde aos arquivos que usam menos espaço; se precedido por um sinal de mais (” + “), corresponde aos arquivos que usam mais. Os seguintes sufixos podem ser usados para abreviar unidades:
O tamanho não conta blocos indiretos, mas conta blocos em arquivos esparsos que não são realmente alocados. Você deve observar que os especificadores de formato ‘ % k ‘ e ‘ % b ‘ de -printf lidam com arquivos esparsos de maneira diferente. O sufixo ‘ b ‘ sempre indica blocos de 512 bytes e nunca blocos de 1 kilobyte, o que é diferente do comportamento de -ls . | ||||||||||||||||
-verdadeiro | Quando usado em uma expressão, -true sempre retorna true . | ||||||||||||||||
-tipo c | Retorna true se um arquivo for do tipo c :
| ||||||||||||||||
-uid n | Retorna true se o ID do usuário numérico de um arquivo for n . | ||||||||||||||||
-utilizado n | Retorna true se um arquivo foi acessado pela última vez n dias após a última alteração de status. | ||||||||||||||||
-user uname | Retorna true se um arquivo pertencer ao nome do usuário (IDs numéricos do usuário são permitidos). | ||||||||||||||||
-wholename pattern | Funcionalmente o mesmo que -path . Essa alternativa é menos portátil que -path ; para maior conformidade em diferentes tipos de sistemas, você deve usar -path . | ||||||||||||||||
-writable | Corresponde a arquivos graváveis. Isso leva em consideração as listas de controle de acesso e outros fatores de permissão que o teste -perm ignora. Esse teste faz uso da chamada do sistema de acesso e pode ser enganado pelos servidores NFS que fazem o mapeamento de UID (ou esmagamento de raiz), pois muitos sistemas implementam o acesso no kernel do cliente e, portanto, não podem usar as informações de mapeamento de UID mantidas em o servidor | ||||||||||||||||
-xtype c | O mesmo que -type , a menos que o arquivo seja um link simbólico. Para links simbólicos: se a opção -H ou -P foi especificada, retornará true se o arquivo for um link para um arquivo do tipo c ; se a opção -L tiver sido fornecida, retornará true se c for ‘ l ‘. Em outras palavras, para links simbólicos, -xtype verifica o tipo de arquivo que -type não verifica. |
Ações
-excluir | Excluir arquivos correspondentes; retorna true se a remoção for bem-sucedida. Se a remoção falhar, uma mensagem de erro será emitida. Se -delete falhar, o status de saída da localização será diferente de zero (quando eventualmente sair). O uso de -delete ativa automaticamente a opção -thpth . Não esqueça que a linha de comando find é avaliada como uma expressão ; portanto, ao colocar -delete primeiro, o find tentará excluir tudo abaixo dos pontos de partida especificados. Ao testar uma linha de comando find que mais tarde você pretende usar com -delete , especifique explicitamente -thp para evitar surpresas posteriores. Como -delete implica -thth , você não pode usar -une e -dete juntos. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
comando -exec ; | Executar comando em cada arquivo correspondente; retorna true se 0 for retornado como o status de saída do comando . Todos os seguintes argumentos a serem encontrados são considerados argumentos para o comando até que um ponto-e-vírgula (‘ ; ‘) seja encontrado. A string ‘ {} ‘ é substituída pelo nome do arquivo atual sendo processado em todos os lugares em que ocorre nos argumentos do comando, não apenas nos argumentos em que está sozinho, como em algumas versões do find . Ambas as construções podem precisar ser escapadas (com um ‘ \ ‘) ou citadas para protegê-las da expansão pelo shell. O comando especificado é executado uma vez para cada arquivo correspondente. O comando é executado no diretório inicial. Existem problemas de segurança inevitáveis em torno do uso de -exec ; você deve usar a opção -execdir . | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
comando -exec {} | Essa variante da ação -exec executa o comando especificado nos arquivos selecionados, mas a linha de comandos é criada anexando cada nome de arquivo selecionado no final; o número total de invocações do comando será muito menor que o número de arquivos correspondentes. A linha de comando é construída da mesma maneira que o xargs cria suas linhas de comando. Somente uma instância de ‘ {} ‘ é permitida dentro do comando. O comando é executado no diretório inicial. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
comando -execdir ; comando -execdir {} | Como -exec , mas o comando especificado é executado no subdiretório que contém o arquivo correspondente, que normalmente não é o diretório em que você começou a localizar . Esse é um método muito mais seguro para chamar comandos, pois evita “condições de corrida” (onde o comportamento é determinado por uma ordem imprevisível de operações do sistema) durante a resolução dos caminhos para os arquivos correspondentes. Como na ação -exec , a forma ‘ + ‘ de -execdir criará uma linha de comando para processar mais de um arquivo correspondente, mas qualquer chamada de comando especificada listará apenas os arquivos que existem no mesmo subdiretório. Se você usar esta opção, deverá garantir que sua variável de ambiente $ PATH não faça referência ‘ . ‘; caso contrário, um invasor poderá executar qualquer comando que desejar, deixando um arquivo com nome apropriado em um diretório no qual você executará -execdir . O mesmo se aplica a ter entradas em $ PATH que estão vazias ou não são nomes de diretório absolutos. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
arquivo -fls | Retorna verdadeiro; se comporta como -ls , mas grava no arquivo como -fprint . O arquivo de saída é sempre criado, mesmo que nenhuma correspondência seja encontrada. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
arquivo -print | Retorna verdadeiro; imprime o nome completo do arquivo no arquivo . Se o arquivo não existir quando a localização for executada, ele será criado; se existir, será truncado . Os nomes de arquivo ” / dev / stdout ” e ” / dev / stderr ” são tratados especialmente; eles se referem à saída padrão e à saída de erro padrão, respectivamente. O arquivo de saída é sempre criado, mesmo que o predicado nunca seja correspondido. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
arquivo -fprint0 | Retorna verdadeiro; como -print0, mas grava no arquivo como -fprint . O arquivo de saída é sempre criado, mesmo que nenhuma correspondência seja encontrada. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-fprintf formato de arquivo | Retorna verdadeiro; como -printf , mas grava no arquivo como -fprint . O arquivo de saída é sempre criado, mesmo que o predicado nunca seja correspondido. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-ls | Retorna verdadeiro; lista o arquivo atual no formato ls -dils (consulte ls para obter detalhes) na saída padrão. As contagens de blocos são de 1K blocos, a menos que a variável de ambiente POSIXLY_CORRECT esteja configurada. Nesse caso, blocos de 512 bytes são usados. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
comando -ok ; | Como -exec , mas pergunta primeiro ao usuário. Se o usuário concordar, find executa o comando. Caso contrário, ele retornará false. Se o comando for executado, sua entrada padrão será redirecionada de / dev / null . A resposta ao prompt é comparada com um par de expressões regulares para determinar se é uma resposta afirmativa ou negativa. Essa expressão regular é obtida do sistema se a variável de ambiente ‘ POSIXLY_CORRECT ‘ estiver configurada ou, caso contrário, das traduções de mensagens da localização. Se o sistema não tiver uma definição adequada, será utilizada a própria definição de localização. Nos dois casos, a interpretação da própria expressão regular será afetada pelas variáveis de ambiente ‘ LC_CTYPE ‘ (classes de caracteres) e ‘ LC_COLLATE ‘ (intervalos de caracteres e classes de equivalência). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
comando -okdir ; | Como -execdir, mas solicita ao usuário primeiro da mesma maneira que para -ok . If the user does not agree, returns false. If the command is run, its standard input is redirected from /dev/null . | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Returns true; prints the full file name on the standard output, followed by a newline . If you are piping the output of find into another program and there is the faintest possibility that the files which you are searching for might contain a newline, then you should consider using the -print0 option instead of -print . | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-print0 | Returns true; prints the full file name on the standard output, followed by a null character (instead of the newline character that -print uses). This allows file names that contain newlines or other types of white space to be correctly interpreted by programs that process the find output. This option corresponds to the -0 option of xargs . | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-printf format | Returns true; prints format on the standard output, interpreting ‘ \ ‘ escapes and ‘ % ‘ directives. Field widths and precisions can be specified as with the ‘ printf ‘ C function . Please note that many of the fields are printed as %s rather than %d , and this may mean that flags don’t work as you might expect. This also means that the ‘ – ‘ flag does work (it forces fields to be left-aligned). Unlike -print , -printf does not add a newline at the end of the string. The escapes and directives are:
A ‘ \ ‘ character followed by any other character is treated as an ordinary character, so they both are printed.
Um caractere ‘ % ‘ seguido por qualquer outro caractere é descartado, mas o outro caractere é impresso (mas não confie nisso, pois outros caracteres de formato podem ser introduzidos). Um ‘ % ‘ no final do argumento de formato causa comportamento indefinido, pois não há o seguinte caractere. Em alguns locais, pode ocultar as chaves da porta, enquanto em outros pode remover a página final do romance que você está lendo. As diretivas % me% d suportam os sinalizadores # , 0 e + , mas as outras diretivas não, mesmo que imprimam números. As diretivas numéricas que não oferecem suporte a esses sinalizadores incluem G , U , b , D , k e n . O sinalizador de formato ‘ – ‘ é suportado e altera o alinhamento de um campo de justificado à direita (que é o padrão) para justificado à esquerda. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-ameixa seca | Verdadeiro ; se o arquivo for um diretório, não desça nele. Se -thth for fornecida, false ; sem efeito. Como -delete implica -thth , você não pode usar -une e -dete juntos. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-Sair | Saia imediatamente. Nenhum processo filho ficará em execução, mas não serão processados mais caminhos especificados na linha de comando. Por exemplo, find / tmp / foo / tmp / bar -print -quit imprimirá apenas / tmp / foo . Quaisquer linhas de comando construídas com -execdir … {} + serão invocadas antes da localização das saídas. O status de saída pode ou não ser zero, dependendo se um erro já ocorreu. |
Manipulando nomes de arquivos incomuns
Muitas das ações de busca resultam na impressão de dados que estão sob o controle de outros usuários. Isso inclui nomes de arquivos, tamanhos, tempos de modificação e assim por diante. Os nomes de arquivos são um problema em potencial, pois podem conter qualquer caractere, exceto ‘ \ 0 ‘ e ‘ / ‘. Caracteres incomuns nos nomes de arquivos podem fazer coisas inesperadas e muitas vezes indesejáveis no seu terminal (por exemplo, alterar as configurações das teclas de função em alguns terminais). Caracteres incomuns são tratados de maneira diferente por várias ações, conforme descrito abaixo:
-print0 , -fprint0 | Sempre imprima o nome exato do arquivo, inalterado, mesmo se a saída estiver indo para um terminal. |
-ls , -fls | Caracteres incomuns são sempre escapados. Caracteres de espaço em branco, barra invertida e aspas duplas são impressos usando escape em estilo C (por exemplo, ‘ \ f ‘, ‘ \ “ ‘). Outros caracteres incomuns são impressos usando escape octal. Outros caracteres imprimíveis (para -ls e -fls esses são os caracteres entre octal 041 e 0176) são impressos como estão. |
-printf , -fprintf | Se a saída não for para um terminal, ela será impressa como está. Caso contrário, o resultado depende de qual diretiva está em uso. As diretivas % D , % F , % g , % G , % H , % Y e % y se expandem para valores que não estão sob controle dos proprietários dos arquivos e, portanto, são impressos como estão. As diretivas % a , % b , % c , % d , % i , % k , % m , % M , % n , % s , % t , % u e % U possuem valores que estão sob o controle de arquivos ‘ proprietários, mas que não podem ser usados para enviar dados arbitrários ao terminal e, portanto, são impressos como estão. As diretivas % f , % h , % l , % p e % P são citadas. Esta citação é realizada da mesma maneira que para o GNU ls . Este não é o mesmo mecanismo de citação usado para -ls e -fls . Se você pode decidir qual formato usar para a saída de localização, normalmente é melhor usar ‘ \ 0 ‘ como um terminador do que usar nova linha, pois os nomes dos arquivos podem conter espaço em branco e caracteres de nova linha. A configuração da variável de ambiente ‘ LC_CTYPE ‘ é usada para determinar quais caracteres precisam ser citados. |
-print , -fprint | A citação é tratada da mesma maneira que para -printf e -fprintf . Se você estiver usando find em um script ou em uma situação em que os arquivos correspondentes possam ter nomes arbitrários, considere usar -print0 em vez de -print . |
As ações -ok e -okdir imprimem o nome do arquivo atual como está.
Operadores
Os seguintes operadores de localização são listados em ordem crescente de precedência:
( expr ) | Forçar precedência. Como os parênteses são especiais para o shell, você normalmente precisará citá-los. Por exemplo, você provavelmente precisará especificar ‘ \ (… \) ‘ em vez de ‘ (…) ‘. |
! expr | Retorna true se expr for false. Esse personagem também geralmente precisará de proteção contra a interpretação do shell. |
-not expr | O mesmo que ! expr , mas não compatível com POSIX. |
expr1 expr2 | Duas expressões seguidas são usadas para serem unidas com um “e” implícito; em outras palavras, expr2 não é avaliado se expr1 for falso. |
expr1 -a expr2 | O mesmo que expr1 expr2 . |
expr1 – e expr2 | O mesmo que expr1 expr2 , mas não compatível com POSIX. |
expr1 -o expr2 | OR booleano; em outras palavras, expr2 não é avaliado se expr1 for verdadeiro. |
expr1 -ou expr2 | O mesmo que expr1 -o expr2 , mas não compatível com POSIX. |
expr1 , expr2 | A separação de duas expressões por vírgula as trata como uma lista: expr1 e expr2 são sempre avaliadas. O valor de expr1 é descartado no valor de retorno; o valor da lista é o valor de expr2 . O operador de vírgula pode ser útil para procurar diferentes tipos de coisas, mas percorrer a hierarquia do sistema de arquivos apenas uma vez. A ação -fprintf pode ser usada para listar os vários itens correspondentes em diferentes arquivos de saída. |
variáveis ambientais
LANG | Fornece um valor padrão para as variáveis de internacionalização não configuradas ou nulas. |
LC_ALL | Se definido como um valor de sequência não-vazio, o valor dessa variável substituirá os valores de todas as outras variáveis de internacionalização. |
LC_COLLATE | O padrão POSIX especifica que essa variável afeta a correspondência de padrões a ser usada para a opção -name . O GNU find usa a função de biblioteca fnmatch , e assim o suporte para ‘ LC_COLLATE ‘ depende da biblioteca do sistema. Essa variável também afeta a interpretação da resposta a -ok ; enquanto a variável ‘ LC_MESSAGES ‘ seleciona o padrão real usado para interpretar a resposta a -ok , a interpretação de quaisquer expressões de colchetes no padrão será afetada por ‘ LC_COLLATE ‘. |
LC_CTYPE | Essa variável afeta o tratamento das classes de caracteres usadas nas expressões regulares e também com o teste -name , se a função da biblioteca fnmatch do sistema suportar isso. Essa variável também afeta a interpretação de qualquer classe de caractere nas expressões regulares usadas para interpretar a resposta ao prompt emitido por -ok . A variável de ambiente ‘ LC_CTYPE ‘ também afetará quais caracteres são considerados imprimíveis quando nomes de arquivos são impressos. |
LC_MESSAGES | Determina o código do idioma a ser usado para mensagens internacionalizadas. Se a variável de ambiente ‘ POSIXLY_CORRECT ‘ for configurada, isso também determinará a interpretação da resposta ao prompt feita pela ação -ok . |
NLSPATH | Determina a localização dos catálogos de mensagens de internacionalização. |
CAMINHO | Afeta os diretórios pesquisados para encontrar os executáveis chamados por -exec , -execdir , -ok e -okdir . |
POSIXLY_CORRECT | Determina o tamanho do bloco usado por -ls e -fls . Se POSIXLY_CORRECT estiver definido, os blocos são unidades de 512 bytes. Caso contrário, são unidades de 1024 bytes. A configuração dessa variável também desativa as mensagens de aviso (ou seja, implica -nowarn ) por padrão, porque o POSIX exige que, além da saída para -ok , todas as mensagens impressas no stderr sejam diagnósticas e resultem em um status de saída diferente de zero. Quando POSIXLY_CORRECT não está definido, -perm + zzz é tratado como -perm / zzz se + zzz não for um modo simbólico válido. Quando POSIXLY_CORRECT é definido, essas construções são tratadas como um erro. Quando POSIXLY_CORRECT é definido, a resposta ao prompt feito pela ação -ok é interpretada de acordo com o catálogo de mensagens do sistema, em oposição a de acordo com as próprias traduções de mensagens da localização. |
TZ | Afeta o fuso horário usado para algumas das diretivas de formato relacionadas a hora de -printf e -fprintf . |
Exemplos
encontrar
Ao usar o linux, a execução do comando find sem nenhuma opção localizará e imprimirá uma lista de todos os arquivos dentro e abaixo do diretório atual. Isso inclui todos os arquivos em todos os subdiretórios do diretório atual.
encontrar .
O mesmo que o comando acima. O ” . ” Informa explicitamente que você deseja que a pesquisa comece no diretório atual.
encontrar . / home / jeff / home / stacy
Localize e imprima todos os arquivos e diretórios dentro e abaixo de três diretórios iniciais diferentes: o diretório atual, / home / jeff e / home / stacy .
encontre / usr / bin / usr / lib -name '* zip *'
Localize e imprima todos os arquivos e diretórios dentro e abaixo de um dos diretórios / usr / bin e / usr / lib, que contém o texto ” zip ” em qualquer lugar do nome do arquivo ou diretório.
encontrar / casa / jeff / fruta | grep 'apple'
Este comando diz para localizar e localizar uma lista completa de todos os arquivos dentro e abaixo do diretório / home / jeff / fruit , e canalizar essa lista para grep , que filtra qualquer nome de arquivo que não contenha o texto ” apple “.
encontrar . -name 'apple'
Localize e imprima uma lista de qualquer arquivo no diretório atual ou abaixo dele, com o nome exatamente ” apple “, todas em minúsculas.
encontrar . -iname 'maçã'
Localize e imprima uma lista de qualquer arquivo no diretório atual cujo nome seja ” apple ” ou abaixo dele, mas corresponda às letras que não diferenciam maiúsculas de minúsculas. Portanto, os arquivos ou diretórios denominados ” Apple “, ” ApplE ” e ” ApPLe ” serão todos listados por este comando.
encontrar . -name 'apple' - tipo f
Localize e imprima uma lista de arquivos no diretório atual ou abaixo dele, com o nome ” apple “; não exiba diretórios, soquetes ou outros tipos de arquivo não regulares.
encontrar . -name 'apple' - tipo d
Localize uma lista de diretórios impressos ou abaixo do diretório atual, cujo nome é ” apple “; não exiba arquivos regulares ou tipos de arquivos que não sejam entradas de diretório.
encontrar . -group dev
Localize e imprima uma lista de qualquer arquivo dentro ou abaixo do diretório atual cujo grupo proprietário é o grupo dev .
encontrar . -EU
Localize e imprima uma lista de qualquer arquivo no diretório atual ou abaixo dele e siga os links simbólicos . Em outras palavras, exiba informações sobre o arquivo ao qual um link simbólico vincula, em vez de informações sobre o próprio link simbólico.
encontrar . +1
Localize e imprima uma lista de qualquer arquivo no diretório atual que foi acessado pela última vez há mais de um dia ou abaixo dele.
encontrar . -atime -1
Localize e imprima uma lista de qualquer arquivo no diretório atual que foi acessado pela última vez há menos de um dia ou abaixo dele.
encontrar . -amin +5
Localize e imprima uma lista de qualquer arquivo no diretório atual que foi modificado há mais de 5 minutos ou abaixo dele.
encontrar . -amin -5
Localize e imprima uma lista de qualquer arquivo no diretório atual que foi modificado há menos de 5 minutos ou abaixo.
encontrar . -perm 754
Localize e imprima uma lista de qualquer arquivo no diretório atual ou cujos bits octais de permissão sejam 755 (o usuário pode ler, escrever e executar; os membros do grupo proprietário podem ler e executar; outros podem apenas ler). Para mais informações sobre bits de permissão, consulte chmod .
encontrar . -perma u = rwx, g = rx, o = r
O mesmo que o comando acima, mas usa uma representação simbólica dos bits de permissão. Observe que a notação simbólica usa um separador de vírgula e não contém espaços.
encontrar . -size + 1M -type f
Localize e imprima uma lista de qualquer arquivo comum no diretório atual ou abaixo, cujo tamanho seja maior que 1 megabyte.
encontrar . -size -5G -type f
Localize e imprima uma lista de qualquer arquivo comum no diretório atual ou abaixo dele, com tamanho inferior a 5 gigabytes.
encontrar . -user jeff
Localize e imprima uma lista de qualquer arquivo ou diretório dentro ou abaixo do diretório atual de propriedade do usuário jeff .
encontrar . -size + 1G -exec mv '{}' ~ / bigfiles \;
Localize todos os arquivos no diretório atual ou abaixo dele, cujo tamanho seja maior que 1 gigabyte, e execute o comando mv neles, movendo-os para o diretório bigfiles no diretório inicial. O {} indica onde no comando o nome do arquivo correspondente deve ser colocado; ele deve ser colocado entre aspas para protegê-lo de ser mal interpretado pelo shell. Da mesma forma, o ponto e vírgula que encerra o comando deve ser escapado com uma barra invertida (” \; “).
encontrar . -size + 1G -print0 | xargs -0 -I '{}' mv '{}' ~ / bigfiles
Localize qualquer arquivo no diretório atual ou abaixo dele, cujo tamanho seja maior que 1 gigabyte, em seguida, canalize essa lista para o comando xargs , que usa o comando mv para mover cada um desses arquivos para os bigfiles do diretório em seu diretório pessoal. Isso é semelhante ao comando acima, mas melhor por vários motivos. Primeiro, ele usa a opção -print0 para dizer ao find para criar sua lista separando cada nome de arquivo com um caractere nulo em vez de uma nova linha ; isso dificulta a leitura de uma lista para humanos, mas tem a vantagem de facilitar a análise de outro programa. Você sempre deve usar -print0 ao canalizar a saída para xargs .
Usar o xargs para executar comandos em todos os arquivos encontrados geralmente é melhor do que usar a opção find ‘s -exec, devido à maneira mais eficiente pela qual o xargs encadeia cada comando que gera.
O argumento -0 para xargs diz que ele espera o caractere nulo como separador de nome de arquivo (que especificamos com a opção find ‘s -print0 ).
A opção -I ‘{}’ diz ao xargs para substituir ” {} ” pelo nome de cada arquivo encontrado. Em seguida, formamos nosso comando usando {} onde queremos que o nome do arquivo apareça. Nós o colocamos entre aspas simples para protegê-lo do shell.
O xargs não espera um ponto-e-vírgula no final do comando, ao contrário de find -exec , portanto, ele não está incluído neste comando.
encontrar . -size + 1G -ok mv '{}' ~ / bigfiles \;
Usar -ok é o mesmo que usar -exec , mas você será solicitado a confirmar antes de cada comando ser executado.
encontrar . -name '* .jpg' -o -name '* .gif'
Localize todos os arquivos no diretório atual ou abaixo do sufixo ” .jpg ” ou ” .gif “. A opção -o funciona como um operador OR booleano ; se alguma das condições for verdadeira, o arquivo será incluído na lista.
encontrar . -maxdepth 2 -name '* .jpg'
Localize qualquer arquivo no diretório atual ou abaixo dele, com o sufixo ” .jpg “, mas limite a passagem do subdiretório para 2 níveis abaixo do diretório atual. Os subdiretórios com 3 ou mais níveis de profundidade não serão pesquisados.
encontrar . ! -name '* .jpg'
Localize qualquer arquivo no diretório atual ou abaixo dele, cujo sufixo não seja ” .jpg “. O ponto de exclamação (” ! “) Funciona como um operador booleano NOT; ele lista apenas arquivos para os quais a condição é falsa.
encontre / tmp -name core -type f -print0 | xargs -0 / bin / rm -f
Encontre os arquivos denominados core no diretório / tmp ou abaixo dele e exclua-os. O teste -name vem antes do teste -type para evitar a necessidade de chamar stat em todos os arquivos.
encontre $ HOME -time 0
Procure por arquivos no seu diretório pessoal que foram modificados nas últimas vinte e quatro horas. Este comando funciona dessa maneira porque o tempo desde a última modificação de cada arquivo é dividido por 24 horas e o restante é descartado. Isso significa que, para corresponder a -mtime 0 , um arquivo precisará ter uma modificação no passado, menos de 24 horas atrás.
encontre / sbin / usr / sbin -executable! -legível
Procure por arquivos nos diretórios binários do superusuário, / sbin e / usr / sbin , executáveis, mas não legíveis.
Suprimindo mensagens de erro ao usar o find
Uma última dica para usar o find : você receberá uma mensagem de erro se encontrar um arquivo ou diretório que você não tem acesso para visualizar. A mensagem de erro ficará assim:
find: `./tmp/sysfile-PKdhtXMmr18n ': permissão negada
Você pode não querer essas mensagens em sua saída; eles podem dificultar a análise dos resultados reais da localização .
Para esses exemplos, assumiremos que você está usando o bash como seu shell, que é o padrão no linux. Digamos que seu comando seja simples:
encontrar .
Se os resultados deste comando apresentarem erros de ” Permissão negada “, a maneira mais simples de filtrá-los é enviá-los para / dev / null , que é o dispositivo no Linux que não aponta para lugar nenhum. Seu comando ficaria assim:
encontrar . 2> / dev / null
Aqui, 2> é um operador especial no bash, que significa “redirecionar erro padrão”. Isso ocultará efetivamente todas as mensagens de erro da saída da localização.
Você pode não querer ocultar todas as mensagens de erro. E se houver outro erro de algum tipo? Você não deseja suprimir essas mensagens também. Nesse caso, você pode usar este comando:
encontrar . 2> & 1 | grep -v 'Permissão negada'
Aqui, 2> diz ao bash para redirecionar o erro padrão, e & 1 diz para usar a saída padrão como destino. Isso redireciona todas as mensagens de erro emitidas pelo find para saída padrão; isso parecerá o mesmo na tela do terminal, mas, combinando-os com a saída padrão, os tornamos filtráveis pelo grep . Então, canalizamos a saída de find para grep , que corresponde ao inverso ( -v ) da nossa string, ‘Permission denied’ . O resultado é que ele exibe qualquer linha que não contenha essa sequência. Isso permite que você exiba seus resultados sem nenhuma mensagem de erro “Permissão negada”.
Comandos relacionados
chmod – Altere as permissões de arquivos ou diretórios.
cpio – Copia arquivos para ou de arquivos.
localizar – Pesquise um banco de dados local para encontrar arquivos por nome.
ls – lista o conteúdo de um diretório ou diretórios.
sh – O interpretador de comandos do Bourne shell.
whereis – Localize os arquivos de página binário, de origem e manual de um comando.
what – Localize o binário de um comando.
xargs – Crie e execute comandos complexos e execute-os em vários arquivos.