Há algum comportamento estranho ao excluir o caminho de find
:
find ~ -not -path "~/sandboxes/*" -name 'some-file.vmdk'
dá:
/home/user/VMs/win/some-file.vmdk
find: ‘/home/user/sandboxes/debian7.amd64.buildd/root/...’: Permission denied
find: ‘/home/user/sandboxes/debian7.amd64.buildd/var/...’: Permission denied
O que há de errado?
PS infelizmente -prune
não funciona também:
find ~ -path "/home/user/sandboxes/*" -prune -o -name 'some-file.vmdk'
dá resultados mais estranhos:
/home/user/nemu_vm/win/some-file.vmdk
/home/user/sandboxes/debian7.amd64.buildd
/home/user/sandboxes/debian9.amd64.buildd
Seu comando
impressões
porque a ação padrão quando nenhuma ação é fornecida é a saída dos nomes de caminho encontrados. Os nomes de caminho acima são encontrados e, em seguida, esses caminhos são removidos. A remoção de um caminho de pesquisa não exclui a impressão desses nomes de caminho.
No entanto, se você adicionar
-print
até o final, como ementão esses nomes de caminho não seriam impressos. Isso ocorre porque agora você tem uma ação explícita (o
-print
), portanto, nenhuma ação padrão é acionada. O-print
único se aplica ao lado direito de-o
.Observe que o
*
não é necessário e que a variável$HOME
é mais fácil de trabalhar do que~
, especialmente em scripts.Seu primeiro comando,
muito provavelmente não funciona, pois
~
não está expandido entre aspas.Assumindo que você usou
$HOME
em vez disso, ele também não remove o caminho de pesquisa, o que significa que ainda inseriria~/sandboxes
, mas nunca imprimiria nenhum nome de caminho abaixo desse caminho. Como ele entra no diretório, ele ainda daria os erros de permissão quando alcançasse os diretórios inacessíveis.Você pode tentar desta forma:
Ou com -prune :
mas não consigo encontrar uma maneira de remover a impressão de ~/sandboxes