. = 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).