Recursiva acidental cp -R, agora não é possível excluir o arquivo usando Lixeira ou rm

4

Após um erro de digitação em um caminho ao usar cp , pareço ter copiado a pasta acidentalmente para ela de forma recursiva, e agora não consigo excluir essa pasta usando rm -rf ou a Lixeira do Mac OS X% código%. O arquivo está localizado no disco de inicialização (portanto, HFS + J).

A saída de Finder é apenas rm -rf repetida, assim:

rm: o/old/old/old/old/old/old/old/old: Directory not empty
rm: o/old/old/old/old/old/old/old: Directory not empty
rm: o/old/old/old/old/old/old: Directory not empty
rm: o/old/old/old/old/old: Directory not empty
rm: o/old/old/old/old: Directory not empty
rm: o/old/old/old: Directory not empty
rm: o/old/old: Directory not empty
rm: o/old: Directory not empty
rm: o: Directory not empty

O que eu faço para excluir esta pasta?

Eu tentei renomear a primeira pasta, como você pode ver, para encurtar o caminho do arquivo. A pasta é movida para Directory not empty fine, mas não é excluída devido à seguinte caixa de diálogo de alerta:

The operation can’t be completed because the item is in use.
    
por georgeunix 20.06.2015 / 13:00

3 respostas

3

Tente

find o -delete

ou

find o -depth -delete

-depth informa find para ir primeiro para a parte mais profunda da árvore de diretórios, e depois voltar a subir. A página man diz: "O uso de -delete ativa automaticamente a opção -depth ." Se sua versão de find não for compatível com -delete , tente

find o -depth -exec rm -rf {} ";"
    
por 20.06.2015 / 17:08
2

Bem, acabei de ter o mesmo problema. Eu resolvi isso encurtando o nome de todos único dos diretórios aninhados.

Como esse é um problema único, eu não tentei criar nenhuma mágica de script inteligente. Eu acabei de escrever

for FILE in $(ls); do mv $FILE a; cd a; done

em um shell, então pressione a seta para cima para chamar o comando novamente e retornar . Com um dedo em cada tecla, eu apenas repeti as duas teclas rapidamente até o diretório mais profundo. Então cd ~ e cd para a raiz da árvore defeituosa. Um rm -r normal agora faz o trabalho.

    
por 03.10.2015 / 19:43
1

Se você entender, é óbvio. Porque você não pode reciclar no fundo, você deve mover o diretório que é um nível mais profundo apenas um nível acima. Depois disso, um diretório com profundidade "one" permanece, o qual pode ser deletado.

Vamos supor que você tenha um diretório "infinito" a / a / a / a / a / a / a /....

você faz:

mv a/a b
rm -r a
mv b/a a
rm -r b

Repita até não restar nenhum diretório.

O script a seguir faz isso: (você precisa pressionar ctrl-c depois de terminar)

while [ true ]; do mv a/a b; rm -r a; mv b/a a; rm -r b; done

Como os nomes são idênticos, os scripts 'invertem' entre dois nomes temporários.

    
por 30.11.2015 / 17:42

Tags