rm
recursão só funciona para baixo correto?
rm -r x y
irá excluir x
e y
tudo dentro deles (se forem diretórios), mas não seus pais ou qualquer coisa fora deles.
Em execução: sudo rm -R *.QTFS
excluirá todos os arquivos * .QTFS no diretório atual e seus filhos, correto?
Não. Ele excluirá todos os arquivos nomeados *.QTFS
, todos os arquivos recursivamente dentro dos diretórios chamados *.QTFS
e os próprios diretórios. Se você quiser esse outro comportamento de exclusão, use find -delete
.
O diretório atual, como exibido por, ls -lha
também contém .
e ..
links para a falta de uma palavra melhor; então, por que a recursão não os segue na árvore de diretórios? Existe um limite artificial no aplicativo rm, ou .
e ..
não são coisas reais?
É um limite artificial de rm
.
No entanto, não é tão artificial - é a única maneira de funcionar. Se rm
seguissem os ..
links principais , todos rm -r
removeriam todos os arquivos do sistema, seguindo todos os ..
links até o final /
. rm
vê as entradas ..
e .
em cada diretório quando lista o conteúdo e as ignora explicitamente por esse motivo.
Você pode tentar isso sozinho, de fato. Execute rm -r .
e a maioria das rm
implementações se recusará a agir, relatando um erro explicitamente:
$ rm -r .
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
(essa mensagem é do GNUrm
; outros são semelhantes). Quando encontra essas entradas implicitamente, e não como argumentos explícitos, apenas as ignora e continua. Esse comportamento é exigido pelo POSIX . No GNU rm
e em muitos dos BSDs, é fornecido automaticamente pela fts_read
família de funções de passagem pela hierarquia.
ou .
e ..
não são coisas reais?
.
e geralmente..
são entradas de diretório reais, embora isso seja específico do sistema de arquivos. Eles quase sempre serão apresentados como se fossem entradas reais para todo o código do usuário, independentemente. Muitos programas (e não apenas ) casos especiais de comportamento para capturar ou impedir recursões descontroladas ou indesejáveis.rm