.
= o diretório atual, ou seja. pesquise o diretório atual e os diretórios abaixo dele. Para pesquisar diretórios base, use /home
. Para pesquisar em seu diretório home, use ~/
. Para pesquisar o diretório do usuário "foo", use ~foo/
. Para pesquisar tudo da raiz para baixo, use /
.
NB!: As permissões se aplicam! Se você não tem o direito de decadir em um determinado diretório (como o diretório pessoal de outro usuário), então find
também não pode fazê-lo! O usuário root não tem uma limitação tão estúpida, mas "com grande poder vem uma grande responsabilidade" também.
-type d|f
= Diz para procurar arquivos de um certo "tipo", por exemplo. arquivo, diretório, socket, symbolic-link, named-pipe, ... Um f
especifica que o tipo que você está procurando é um arquivo, enquanto d
especifica que você deseja que find
retorne diretórios.
Normalmente, find
apenas listará os arquivos que encontrar, esta é a diretiva -print
implícita. Aqui, no entanto, queremos encontrar para executar um comando (aqui chmod
) nos arquivos / diretórios que encontrar. Para fazer isso, podemos usar as diretivas -exec
ou -ok
. -ok
perguntará primeiro "sim" ou "não" antes de executar o comando.
O comando a ser executado começa logo após -exec
e continua até que find
encontre ;
(ponto-e-vírgula). Infelizmente, o ponto-e-vírgula tem significado especial para o shell também ( bash
e outros) - ele é usado pelo shell para agrupar comandos juntos em uma linha (por exemplo, command1 ; command2
). Portanto, devemos "citar" o ponto-e-vírgula para que o shell não "veja" antes de find
. O shell aceita três formas de cotação: Aspas duplas ("...") e simples ('...') são normalmente usadas para seqüências de caracteres - poderíamos usar para citar o ponto-e-vírgula. No entanto, quando você deseja citar apenas um único caractere como este, é mais comum usar a terceira forma de citar - uma barra invertida (\). O resultado é o \;
. (Se você colocar o seu find
-command em um arquivo - ex. Faz um script - você pode frequentemente renunciar a \;
e usar apenas o ;
, porque o shell não expande um script da mesma maneira que ele a linha de comando.)
Geralmente, o comando que queremos que find
execute precisará do nome de arquivo find
encontrado. {}
é usado como espaços reservados para o nome do arquivo encontrado. Muitas vezes é uma boa idéia colocar o espaço reservado entre aspas - "{}"
- para garantir que os nomes de arquivos que contêm espaços sejam tratados como um único nome de arquivo pelo comando.
Para os arquivos, descobri que chmod u=rw,go=r {}
ou chmod u=rw,go= {}
funciona melhor, enquanto os diretórios devem usar chmod u=rwx,go=rx {}
ou chmod u=rwx,go= {}
(dependendo do seu nível de paranoia).