Usando o comando Linux e Unix: buscar

O comando Linux e Unix atopa executa unha procura de ficheiros nunha xerarquía de directorios.

Sintaxe para o comando find :

atopar [ruta ...] [expresión]

Descrición

Esta páxina de manual documenta a versión GNU da busca . O comando busca procuras na árbore de directorio rooteada en cada nome de ficheiro mediante a avaliación da expresión dada de esquerda a dereita, de acordo coas regras de precedencia (ver sección sobre operadores a continuación), ata que se coñeza o resultado; noutras palabras, o lado esquerdo é falso para e as operacións, certo para ou , en que punto buscan moverse ao seguinte nome de ficheiro.

O primeiro argumento que comeza con:

toma para ser o comezo da expresión; Algúns argumentos antes de que sexan camiños para buscar, e calquera argumento despois de que sexa o resto da expresión. Se non se proporcionan camiños, emprégase o cartafol actual. Se non se dá ningunha expresión, úsase a expresión -print .

A orde de busca sae co estado 0 se todos os ficheiros son procesados ​​con éxito, máis de 0 se se producen erros.

Expresións

A expresión está formada por opcións (que afectan ao funcionamento xeral e non ao procesamento dun ficheiro específico, e sempre volven verdadeiro), as probas (que devolven un valor verdadeiro ou falso) e as accións (que teñen efectos colaterais e devolven un verdadeiro ou valor falso), todos separados polos operadores. A expresión e suponse onde se omite o operador. Se a expresión non contén outras accións que -prune , entón- a impresión realízase en todos os ficheiros para os que a expresión é verdadeira.

Opcións

Todas as opcións sempre volven verdadeiras. Sempre terán efecto, en vez de ser procesados ​​só cando se alcance o seu lugar na expresión. Polo tanto, para a claridade, o mellor é situalos ao comezo da expresión.

día de inicio Tempo de medida (para -amin, -time, -cmin, -ctime, -mmin e -mtime ) desde o inicio de hoxe en vez de desde as 24 horas.
-profundidade Procese os contidos de cada directorio antes do directorio.
seguir Ligazóns simbólicas Dereference. Implica -noleaf .
-help ou --help Imprimir un resumo do uso da liña de comandos de atopar e saír.
-maxdepth [número] Descenda como máximo o número de niveis (un número enteiro non negativo) de directorios debaixo dos argumentos da liña de comandos. A expresión -maxdepth 0 significa que só se aplican as probas e as accións aos argumentos da liña de comandos.
-defecto [número] Non aplique ningunha proba ou acción a niveis inferiores ao número (un número enteiro non negativo). A expresión- depth 1 significa procesar todos os ficheiros excepto os argumentos da liña de comandos.
cantidade Non baixe directorios noutros sistemas de ficheiros. Un nome alternativo para -xdev , para a compatibilidade con algunhas outras versións de find .
-sobre todo Non se optimice ao asumir que os directorios conteñen 2 subdirectorios máis que o seu reconto de ligazón duro. *
-versión ou -versión Imprime o número da versión de busca e saia.
-xdev Non baixe directorios noutros sistemas de ficheiros.

* Esta opción é necesaria cando se buscan sistemas de ficheiros que non seguen a convención de ligazón de directorio Unix, como CD-ROM ou sistemas de ficheiros MS-DOS ou puntos de montaxe de volume AFS. Cada directorio dun sistema de ficheiros Unix normal ten polo menos 2 ligazóns duras: o seu nome e a súa . entrada (período). Ademais, os seus subdirectorios (se hai) teñen unha entrada ... ligada a ese directorio.

Cando se atopa está a examinar un directorio, despois de ter acolchado dous subdirectorios máis que o reconto de ligazóns do directorio, sabe que o resto das entradas do directorio non son directorios (ficheiros de follas na árbore de directorios). Se só hai que examinar os nomes dos ficheiros, non hai necesidade de facelos; isto dá un aumento significativo na velocidade de busca.

Probas

Os argumentos numéricos pódense especificar como:

+ n Por maior que n.
-n Por menos de n.
n Por exactamente n.
-amin n O arquivo foi visitado por última vez fai n minutos.
-anewer [ficheiro] O último acceso ao ficheiro foi máis recentemente que o ficheiro foi modificado. -O novo é afectado por-só se se -que vén antes -de novo na liña de comandos.
tempo n Foi o último acceso do ficheiro n * fai 24 horas.
-cmin n O estado do ficheiro foi cambiado por última vez hai n minutos.
-cnewer [ficheiro] O estado do ficheiro modificouse por última vez máis recentemente que o ficheiro foi modificado.
- o cnewer é afectado por -sigue só se -segundo vén antes- o novo na liña de comandos.
-timia n O estado do ficheiro foi cambiado por última vez n * fai 24 horas.
-botón O ficheiro está baleiro e é un ficheiro normal ou un directorio.
-false Sempre falso.
-fstype [type] O ficheiro está nun sistema de ficheiros do tipo especificado. Os tipos de sistema de ficheiros válidos varían entre distintas versións de Unix; unha lista incompleta de tipos de sistemas de ficheiros que son aceptados nalgunha versión de Unix ou outra é: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Podes usar -printf coa directiva% F para ver os tipos dos teus sistemas de ficheiros.
-gid n A ID do grupo numérico do ficheiro é n .
-grupo [gname] O ficheiro pertence ao gname do grupo (o ID do grupo numérico está permitido).
-indice [patrón] Como nome, pero a coincidencia non ten sentido.
-iname [patrón] Como nome , pero a coincidencia é case insensible. Por exemplo, os patróns para * e F? coincide cos nomes dos ficheiros Foo , FOO , foo , fOo , etc.
-inum n O ficheiro ten un número de inode n .
-pato [patrón] Como camiño , pero a coincidencia é case insensible.
-irgex [patrón] Do mesmo xeito que -regex, pero a coincidencia é case insensible.
ligazóns n O ficheiro ten ligazóns n .
-lixo [patrón] O ficheiro é unha ligazón simbólica cuxos contidos coinciden co patrón de cáscara. Os metacaracteres non se tratan / ou . especialmente.
-mmin n Os datos do ficheiro foron modificados por última vez hai n minutos.
-mempo n Os datos do ficheiro foron modificados por última vez n * fai 24 horas.
-name [patrón] A base do nome do ficheiro (o camiño cos directorios principais eliminados) coincide co patrón de cáscara. Os metacaracteres ( * ,? E [] ) non coinciden con un . no inicio do nome de base. Para ignorar un directorio e os ficheiros debaixo dela, use -prune ; vexa un exemplo na descrición de -path .
-newer [ficheiro] O ficheiro foi modificado máis recentemente que o ficheiro . A expresión -newer é afectada por - só se se -follow vén antes -newer na liña de comando.
-nouser Ningún usuario corresponde ao ID de usuario numérico do ficheiro.
-nogrupo Ningún grupo corresponde á ID de grupo numérico do ficheiro.
-path [patrón] O nome do ficheiro coincide co patrón de patrón de cunchas. Os metacaracteres non se tratan / ou . especialmente; por exemplo, atopalo. -path './sr*sc imprimirá unha entrada para un directorio chamado ./src/misc (se existe). Para ignorar unha árbore de directorios completa, use -prune no canto de verificar cada ficheiro na árbore. Por exemplo, saltar o directorio src / emacs e todos os ficheiros e directorios debaixo dela, e imprimir os nomes dos outros ficheiros atopados, faga algo así: buscar. -path './src/emacs' -prune -o -print
-perm [modo] Os bits de permiso do ficheiro son exactamente [modo] (octal ou simbólico). Os modos simbólicos usan o modo 0 como punto de partida.
-módulo perma Todos os bits de permiso [modo] están definidos para o ficheiro.
-perm + Calquera dos bits de permiso [modo] está definido para o ficheiro.
-rexex [patrón] O nome do ficheiro coincide co estándar de expresión regular. Esta é unha coincidencia en todo o camiño, non unha procura. Por exemplo, para combinar un ficheiro chamado ./fubar3, pode usar a expresión regular . * Bar. ou . * b. * 3 , pero non b. * r3 .
tamaño n [bckw] O ficheiro usa n unidades de espazo. As unidades son bloques de 512 bytes de forma predeterminada ou se b segue n , bytes se c segue n , kilobytes se k segue n , ou palabras de 2 bytes se w segue n . O tamaño non conta con bloques indirectos, pero contén bloques en arquivos escasos que non son realmente asignados.
-true Sempre verdadeiro.
tipo c O ficheiro é de tipo c :
b Bloquear (buffered) especial
c Personaxe (sen marcar) especial
d Directorio
p Tubo con nome (FIFO)
f Arquivo regular
l Ligazón simbólica
s Socket
D porta (Solaris)
-non n A ID de usuario numérico do ficheiro é n .
-used n O arquivo foi visitado por última vez n días despois de que o seu estado foi modificado por última vez.
-user uname O ficheiro pertence a uname do usuario (permítese o ID de usuario numérico).
-xipo c O mesmo que o tipo, a non ser que o ficheiro sexa unha ligazón simbólica. Para ligazóns simbólicas: se -follow non se deu, verdadeiro se o ficheiro é unha ligazón a un ficheiro de tipo c ; se - se foi dado, verdadeiro se c é l. Noutras palabras, para enlaces simbólicos,
-type verifica o tipo de ficheiro que -type non comproba.

Accións

comando exec;

Comando de execución; verdadeiro se o estado 0 é devolto. Todos os seguintes argumentos para atopar son tomados como argumentos para o comando ata que un argumento consistente en `; ' atópase. A cadea `{} 'substitúese polo nome do ficheiro actual que está a ser procesado en todos os lugares onde se produce nos argumentos ao comando, non só nos argumentos onde está só, como nalgunhas versións de find . Poderíanse escapar estas dúas construcións (cun ​​`\ ') ou citas para protexelas da expansión polo shell. O comando execútase no directorio inicial.

-fls ficheiro

Verdade; como -ls pero escribe a ficheiro como -print.

ficheiro de imaxe

Verdade; imprimir o nome do ficheiro completo no arquivo . Se o ficheiro non existe cando se execute a busca, créase; se existe, está truncado. Os nomes de ficheiro `` / dev / stdout '' e `` / dev / stderr '' son manejados especialmente; refírense á saída estándar e á saída estándar de erro, respectivamente.

ficheiro -fprint0

Verdade; como -print0 pero escribimos en arquivo como -print.

formato de ficheiro fprintf

Verdade; como -printf pero escribe a ficheiro como -print.

comando ;

Do mesmo xeito que -exec pero pedir primeiro ao usuario (na entrada estándar); se a resposta non comeza con `y 'ou' Y ', non execute o comando e devólvese falso.

-print

Verdade; imprima o nome do ficheiro completo na saída estándar, seguido dunha nova liña.

-print0

Verdade; imprimir o nome do ficheiro completo na saída estándar, seguido dun carácter nulo. Isto permite que os nomes dos ficheiros que conteñan novas liñas sexan correctamente interpretados por programas que procesan a saída de busca.

formato de impresión

Verdade; imprimir o formato na saída estándar, interpretando `\ 'escapes e directivas`%'. Os anchos e as precisións de campo pódense especificar como coa función `printf 'C. Ao contrario de -print, -printf non engade unha nova liña ao final da cadea. As fugas e directivas son:

\ a

Alarma timbre.

\ b

Retroceso.

\ c

Deixar de imprimir de forma inmediata e enraixar a saída.

\ f

Formulario de alimentación.

\ n

Nova liña.

\ r

Retorno de carro.

\ t

Pestaña horizontal.

\ v

Pestaña vertical.

\\

Unha barra invertida literal (`\ ').

\ NNN

O carácter cuxo código ASCII é NNN (octal).

Un carácter `\ 'seguido por calquera outro personaxe é tratado como un personaxe normal, polo que ambos están impresos.

%%

Un signo de porcentaxe literal.

% a

Última hora de acceso do ficheiro no formato devolto pola función C `ctime '.

% A k

O último tempo de acceso do ficheiro no formato especificado por k , que é `@ 'ou unha directiva para a función C` strftime'. Os valores posibles para k están listados a continuación; Algúns deles poden non estar dispoñibles en todos os sistemas, debido a diferenzas en `strftime 'entre sistemas.

@

segundos desde o 1 de xaneiro de 1970, 00:00 GMT.

Campos de tempo:

H

hora (00.23)

Eu

hora (01..12)

k

hora (0,23)

l

hora (1,12)

M

minuto (00,59)

p

AM ou PM do local

r

hora, 12 horas (hh: mm: ss [AP] M)

S

segundo (00..61)

T

tempo, 24 horas (hh: mm: ss)

X

representación temporal do local (H: M: S)

Z

zona horaria (por exemplo, EDT), ou nada se non hai zona horaria determinable

Campos de data:

a

o nome do día da semana abreviado do local (Sun..Sat)

A

nome do día completo da localidade, lonxitude variable (domingo ... sábado)

b

nome do mes abreviado do local (Xan ... Dec)

B

nome do mes completo da localidade, lonxitude variable (xaneiro ... decembro)

c

data e hora da localidade (sáb nov 04 12:02:33 EST 1989)

d

día do mes (01.31)

D

data (mm / dd / aaa)

h

igual que b

j

día do ano (001..366)

m

mes (01..12)

U

Número de semana do ano co domingo como primeiro día da semana (00..53)

w

día da semana (0.6)

W

Número de semanas do ano con luns o primeiro día da semana (00,53)

x

representación da data do local (mm / dd / yy)

y

últimos dous díxitos do ano (00..99)

Y

ano (1970 ...)

% b

Tamaño do ficheiro en bloques de 512 bytes (arredondado).

% c

O último estado do ficheiro cambia o tempo no formato devolto pola función C `ctime '.

% C k

O último estado do ficheiro cambia o tempo no formato especificado por k , que é o mesmo que para% A.

% d

Profundidade do ficheiro na árbore de directorios; 0 significa que o ficheiro é un argumento de liña de comandos.

% f

Elimina o nome do ficheiro con todos os directorios principais (só o último elemento).

% F

Tipo do sistema de ficheiros o ficheiro está activado; este valor pódese empregar para -fstype.

% g

Nome do grupo do ficheiro ou ID do grupo numérico se o grupo non ten nome.

% G

ID de grupo numérico do ficheiro.

% h

Directorios principais do nome do ficheiro (todos excepto o último elemento).

% H

Argumento da liña de comandos en que ficheiro se atopou.

% i

Número de inode do ficheiro (en decimal).

% k

Tamaño do ficheiro en bloques de 1K (arredondado).

% l

Obxecto da ligazón simbólica (cadea baleira se o ficheiro non é unha ligazón simbólica).

% m

Bits de permiso do ficheiro (en octal).

% n

Número de ligazóns duras ao ficheiro.

% p

Nome do ficheiro.

% P

O nome do ficheiro co nome do argumento da liña de comandos en que se atopou eliminouse.

% s

Tamaño do ficheiro en bytes.

% t

O último tempo de modificación do ficheiro no formato devolto pola función C `ctime '.

% T k

O último tempo de modificación do ficheiro no formato especificado por k , que é o mesmo que para% A.

% u

Nome de usuario do ficheiro ou ID de usuario numérico se o usuario non ten nome.

% U

ID de usuario numérico do ficheiro.

O carácter `% 'seguido por calquera outro carácter é descartado (pero o outro personaxe está impreso).

-prune

Se a profundidade non se dá, é certo; non baixas o directorio actual.
Se se dá a profundidade, falso; ningún efecto.

-ls

Verdade; Lista o ficheiro actual no formato `ls -dils 'na saída estándar. Os recuentos de bloques son de bloques de 1K, a menos que se configure a variable de ambiente POSIXLY_CORRECT, caso en que se usan bloques de 512 bytes.

Operadores

Listado en orde de prevalencia decreciente:

( expr )

Forza precedencia.

! expr

Verdadeiro se expr é falso.

-non expr

O mesmo que ! expr .

expr1 expr2

E (implícito); expr2 non se evalúa se expr1 é falso.

expr1 -a expr2

Igual que expr1 expr2 .

expr1 -e expr2

Igual que expr1 expr2 .

expr1 -o expr2

Ou; expr2 non se evalúa se expr1 é verdadeiro.

expr1 -o expr2

Igual que expr1 -o expr2 .

expr1 , expr2

Lista; ambos expr1 e expr2 son sempre avaliados. O valor de expr1 é descartado; o valor da lista é o valor de expr2 .

Exemplos

atopar / home -user joe

Atopar todos os ficheiros baixo o directorio / casa propiedade do usuario joe.

atopar / usr -name * stat

Atopar todos os ficheiros baixo o directorio / usr que finalice en ".stat".

atopar / var / spool -mtime +60

Atopar todos os ficheiros baixo o directorio / var / spool que foi modificado fai máis de 60 días.

atopar / tmp -name core-type f -print | xargs / bin / rm -f

Busque ficheiros chamados núcleo dentro ou abaixo do directorio / tmp e elimine. Teña en conta que isto funcionará incorrectamente se hai algún nome de ficheiro que conteña novas liñas, comiñas simples ou dobres ou espazos.

atopar / tmp -name core-type f -print0 | xargs -0 / bin / rm -f

Busque ficheiros chamados núcleo dentro ou abaixo do directorio / tmp e elimíbeos , procesando nomes de ficheiros de tal forma que o ficheiro ou nomes de directorio que conteñan comiñas simples ou dobres, espazos ou liñas novas estean manexadas correctamente. A proba de nome vén antes da proba de tipo para evitar ter que chamar a stat (2) en cada ficheiro.

atopar. -type f -exec file '{}' \;

Executa o ficheiro `` en todos os ficheiros dentro ou abaixo do directorio actual. Teña en conta que os soportes están incluídos nas marcas de cotas simples para protexelos da interpretación como significación de script do shell. O punto e coma é igualmente protexido polo uso dunha barra invertida, aínda que ';' podería ser usado nese caso tamén.

atopar / \ (-perm -4000 -fprintf /root/suid.txt '% # m% u% p \ n' \), \\ (-size + 100M -fprintf /root/big.txt '% -10s% p \ n '\)

Percorre o sistema de ficheiros unha soa vez, listando os ficheiros setuid e os directorios en /root/suid.txt e os grandes ficheiros en /root/big.txt .

atopar $ HOME-hora 0

Busque ficheiros no seu directorio persoal que foron modificados nas últimas vinte e catro horas. Este comando funciona deste xeito porque o tempo desde que se modificou a última modificación divídese en 24 horas e descárgase o resto. Isto significa que coincidir co tempo

0 , un ficheiro terá que ter unha modificación no pasado que fai menos de 24 horas.

atopar. -perm 664

Busque ficheiros que teñan permiso de lectura e escritura para o seu propietario e grupo, pero que outros usuarios poidan ler pero non escribir. Os ficheiros que cumpran estes criterios pero que teñan outros bits de permisos definidos (por exemplo, se alguén pode executar o ficheiro) non se igualará.

atopar. -perm -664

Busque ficheiros que teñan permiso de lectura e escritura para o seu propietario e grupo e que outros usuarios poidan ler, sen ter en conta a presenza de bits de permiso extra (por exemplo, o bit executable). Isto coincidirá cun ficheiro que ten o modo 0777, por exemplo.

atopar. -perm / 222

Busca ficheiros que poden escribilos alguén (o seu propietario, ou o seu grupo ou calquera outro).

atopar. -perm / 220 atopar. -perm / u + w, g + w find. -perm / u = w, g = w

Todos estes tres comandos fan o mesmo, pero o primeiro usa a representación octal do modo de ficheiro e os outros dous usan a forma simbólica. Estes comandos buscan todos os ficheiros que poidan escribir o seu propietario ou o seu grupo. Os ficheiros non deben ser escritos tanto polo propietario como polo grupo a empregar; calquera fará.

atopar. -perm -220 atopar. -perm -g + w, u + w

Ambos os comandos fan o mesmo; busque ficheiros que poidan escribilo tanto o seu propietario como o seu grupo.

atopar. -perm -444 -perm / 222! -perm / 111 atopar. -perm -a + r -perm / a + w! -perm / a + x

Estes dous comandos buscan ficheiros que son lexibles para todos (-perm -444 ou -perm -a + r), polo menos en set de bit de escritura (-perm / 222 ou -perm / a + w) pero non son executables. para calquera (! -perm / 111 e! -perm / a + x respectivamente)

Importante: use o comando man ( % home ) para ver como se usa un comando na súa computadora particular.