¿Cómo crear un directorio llamado '-p' en Linux con Bash? [duplicar]

22

En Bash, ¿cómo podría crear un directorio llamado -p?

mkdir -pha fallado.
mkdir "-p"ha fallado.
mkdir "\-p"ha fallado.
mkdir \-pha fallado.

Jichao
fuente
1
Tenga en cuenta que todos estos están intentando escapar del parámetro para bash. Dado que es el mismo escape que no, todos estos, excepto el tercero, simplemente enviarán la cadena "-p" a mkdir, que lo analizará como una opción. La opción de análisis no se realiza en bash, por lo que cualquier forma de evitar esto (descrita en las respuestas a continuación) es una característica de mkdir (o más bien, una falta de error).
Score_Under
11
Tengo que preguntar por qué quieres un directorio así. Sería un PITA de usar.
Daniel R Hicks
3
@DanielRHicks: Creé esta carpeta por error, pero no sé cómo eliminarla.
Jichao
44
Entonces, ¿no debería ser la pregunta "Cómo eliminar un directorio llamado '-p' en Linux con Bash"?
chepner
@chepner: Porque en realidad son los mismos problemas. Traté de eliminar el directorio rmdirpero fallé con los mismos errores.
Jichao

Respuestas:

40

La mayoría de las utilidades (todas las que cumplen con POSIX excepto testy echo) admiten una opción de "fin de opciones" -- , por lo que puede ejecutar:

mkdir -- -p

Esto es especialmente útil al renombrar o eliminar archivos que potencialmente podrían comenzar con un guión. En los scripts siempre debes usar

mv -- "$filename"

en lugar de un mv "$filename"nombre de archivo simple o, peor aún, sin comillas.

slhck
fuente
3
Increíble. Esto es realmente bueno saberlo
Bruno9779
18

mkdir ./-p

Tenga en cuenta que la mayoría de los otros programas tendrían que usar el mismo "truco".

Daniel B
fuente