Eu queria excluir arquivos com mais de 2 MB em uma pasta específica. Então eu corri:
find . -size +2M
E eu tenho uma lista de dois arquivos
./a/b/c/file1
./a/f/g/file2
Então eu corro:
find . -size +2M -exec rm ;
e recebo a mensagem de erro Find: missing argument to -exec
Verifico a sintaxe na página de manual e diz -exec command ;
Então, ao invés, eu tento
find . -size +2M -exec rm {} +
E isso funciona. Eu entendo que o {} faz executar o comando como em rm file1 file2
vez de rm file1; rm file2;
.
Então, por que o primeiro não funcionou?
RESPONDA:
Eu acho que só precisei RTFM algumas vezes para finalmente entender o que estava dizendo. Mesmo que o primeiro exemplo não mostre {}, as chaves são necessárias em todos os casos. E então adicione \; ou + dependendo do método desejado. Não basta ler o cabeçalho. Leia a descrição também. Entendi.
Por uma questão de eficiência, geralmente é melhor usar xargs:
fonte
Eu não usaria -exec para isso. O find também pode remover os arquivos:
(provavelmente este é um GNUism, não sei se você o encontraria em um achado não-gnu)
fonte
Conforme documentado, -exec requer {} como um espaço reservado para a saída de localização.
O guia definitivo para usar as ferramentas bash e GNU está aqui
Como você pode ver, mostra explicitamente o segundo comando que você usou como exemplo.
fonte