A través de una maniobra descabellada de mi parte, accidentalmente creé un directorio llamado (por ejemplo) -A, y terminé llenándolo con archivos.
Quiero eliminar dicho directorio. He intentado:
rmdir -- -A
pero luego me dice que el directorio todavía tiene archivos. Y no puedo entender cómo cd en el directorio para eliminar dichos archivos.
¿Qué debo hacer para deshacerme de este directorio problemático?
unix
unix-shell
Kate Bertelsen
fuente
fuente
Respuestas:
Uso - en cada comando.
fuente
Puede colocar ./ delante del archivo, de esa manera rm o rmdir no se comportarán como si el nombre de archivo fuera un indicador de opción.
También puede emitir la opción, que le dice a rm que actúe como si todo después de - fuera un nombre de archivo y que no debería procesar más opciones. Puede haber versiones antiguas y originales de rm que no obedecen eso, aunque mi zoológico de unixes antiguos se ha vuelto bastante pequeño en estos días, así que no puedo decirte cuáles o si hay versiones que no entienden.
De todos modos, debe acostumbrarse a poner el ./ delante de los nombres cuando esté eliminando; nunca se sabe si hay un archivo con nombre -r o -rf en su directorio. Podrías decir que siempre deberías usar el - pero creo que el ./ es más natural porque hace explícito que "Quiero eliminar archivos en este directorio, no lo que * le ocurra".
fuente
Cámbiele el nombre y luego trátelo normalmente:
fuente
rmdir no eliminará un directorio con nada dentro. "rm -rf" lo hará. rmdir es considerablemente más seguro que "rm -rf". La respuesta de Moo sigue siendo probablemente la mejor.
fuente
El comando anterior funciona para mí.
fuente
Un método diferente sería eliminar por inodo (esto funciona para archivos / directorios con otros caracteres que son difíciles de eliminar con solo rm).
fuente
-exec
no escapa al nombre, y no necesita hacerlo; El argumento pasado a través de una de lasexec*
llamadas al sistema es el nombre real. Es solo la entrada del shell que necesita caracteres especiales como el asterisco de punto y coma del espacio, etc., citado para que el shell pase el nombre real correcto (SIN comillas). Dicho esto,find -exec rm -f {}
solo funciona para un archivo, no para un directorio como se le solicitó para esta Q;find -exec rm -rf {}
maneja el directorio e incluso el directorio no vacío, pero omitirfind
y simplemente hacerrm -rf ./-A
es mucho más simple.find puede eliminar el directorio de esta manera:
fuente
Estaba tratando de eliminar un directorio llamado
-p
. La respuesta de @ Moo logró lo que no puderm ./-p
, que está ampliamente disponible en muchas páginas web después de una búsqueda en Google.Otro método es usar el número de inodo. Usé el método descrito aquí:
https://www.cyberciti.biz/tips/delete-remove-files-with-inode-number.html
En resumen, use los siguientes comandos:
find
comando usando el-exec rm -irf
argumento para un archivo o-exec rm -ifdr
para un directorio.Asegúrese de usar
-f
dentro de la bandera, de lo contrario bash se quejará de no poder encontrar el directorio o el archivo.Probado en:
fuente
rm -d
nunca y generalmente no-f
cuando invocafind
, pero necesita-r
un directorio y no lo necesita para un archivo. Incluso cuando se corrige, este método sigue siendo torpe e inferior. Para un directorio que norm -fr ./-p
esté vacío, simplemente haga : eso es r para un directorio yf según la configuración de permisos.