Através de uma manobra da minha parte, acidentalmente criei um diretório chamado (por exemplo) -A e acabei preenchendo-o com arquivos.
Eu quero excluir o referido diretório. Eu tentei:
rmdir -- -A
mas ele me diz que o diretório ainda possui arquivos. E não consigo descobrir como fazer um cd no diretório para excluir os arquivos mencionados.
O que devo fazer para me livrar desse diretório problemático?
unix
unix-shell
Kate Bertelsen
fonte
fonte
Respostas:
Use - em todos os comandos.
fonte
Você pode colocar ./ na frente do arquivo - dessa forma, rm ou rmdir não se comportará como se o nome do arquivo fosse um sinalizador de opção.
Você também pode emitir a opção - que instrui a rm a agir como se tudo após a - for um nome de arquivo e que não deverá processar mais opções. Pode haver versões funk mais antigas da rm que não obedeçam a isso, embora meu zoológico de unix de antiguidades tenha ficado bem pequeno nos dias de hoje, então não posso lhe dizer quais ou se existem versões que não entendem -.
Você deve ter o hábito de colocar o ./ na frente dos nomes quando estiver excluindo de qualquer maneira - você nunca sabe se existe um arquivo nomeado -r ou -rf no seu diretório. Você poderia dizer que sempre deve usar o - mas acho que o ./ é mais natural porque torna explícito que "eu quero excluir arquivos deste diretório, não o que quer que * aconteça"
fonte
Renomeie-o e lide com ele normalmente:
fonte
O rmdir não excluirá um diretório com nada dentro dele. "rm -rf" será. rmdir é consideravelmente mais seguro que "rm -rf". A resposta de Moo ainda é provavelmente a melhor.
fonte
O comando acima funciona para mim.
fonte
Um método diferente seria excluir por inode (isso funciona para arquivos / diretórios com outros caracteres que são difíceis de excluir com apenas rm).
fonte
-exec
não escapa ao nome e não precisa; o argumento passado por um dosexec*
syscalls é o nome real. É apenas a entrada do shell que precisa de caracteres especiais, como asterisco de ponto-e-vírgula, etc., citados para fazer com que o shell passe o nome real correto (SEM aspas). Dito isto,find -exec rm -f {}
funciona apenas para um arquivo, não para um diretório, conforme solicitado para este Q;find -exec rm -rf {}
lida com o diretório e até com o diretório não vazio, mas pularfind
e apenas fazerrm -rf ./-A
é muito mais simples.O find pode excluir o diretório desta maneira:
fonte
Eu estava tentando excluir um diretório chamado
-p
. A resposta do @ Moo alcançou o que não puderm ./-p
, que está amplamente disponível em muitas páginas da web após uma pesquisa no Google.Outro método é usar o número do inode. Eu usei o método descrito aqui:
https://www.cyberciti.biz/tips/delete-remove-files-with-inode-number.html
Em resumo, use os seguintes comandos:
find
comando usando o-exec rm -irf
argumento para um arquivo ou-exec rm -ifdr
diretório.Certifique-se de usar o
-f
dentro da flag, caso contrário o bash irá reclamar por não conseguir encontrar o diretório ou arquivo.Testado em:
fonte
rm -d
sempre e-f
quando invocafind
, mas precisa-r
de um diretório e não precisa de um arquivo. Mesmo quando corrigido, esse método ainda é desajeitado e inferior. Para um diretório não vazio, basta fazerrm -fr ./-p
- é r para um diretório ef, dependendo das configurações de permissão.