Comment créer un répertoire nommé '-p' sous Linux avec Bash? [dupliquer]

22

Dans Bash, comment pourrais-je créer un répertoire nommé -p?

mkdir -péchoué.
mkdir "-p"échoué.
mkdir "\-p"échoué.
mkdir \-péchoué.

Jichao
la source
1
Notez que tous ces éléments tentent d'échapper au paramètre de bash. Puisqu'il s'agit du même caractère échappé que non échappé, tous ces éléments, à l'exception du troisième, enverront simplement la chaîne "-p" à mkdir, qui l'analysera en option. L'analyse des options n'est pas effectuée dans bash, donc tout moyen de contourner cela (décrit dans les réponses ci-dessous) est une fonctionnalité de mkdir (ou plutôt, un manque de bogue).
Score_Under
11
Je dois vous demander pourquoi vous souhaitez un tel répertoire. Ce serait un PITA à utiliser.
Daniel R Hicks
3
@DanielRHicks: J'ai créé ce dossier par erreur, mais je ne sais pas comment le supprimer.
Jichao
4
La question ne devrait-elle pas alors être "Comment supprimer un répertoire nommé '-p' sous Linux avec Bash"?
chepner
@chepner: Parce que ce sont les mêmes problèmes en fait. J'ai essayé de supprimer le répertoire avec rmdirmais j'ai échoué avec les mêmes erreurs.
Jichao

Réponses:

40

La plupart des utilitaires (tous compatibles POSIX sauf pour testet echo) prennent en charge une option de "fin des options" -- , vous pouvez donc exécuter:

mkdir -- -p

Cela est particulièrement utile lorsque vous renommez ou supprimez des fichiers qui pourraient potentiellement commencer par un tiret. Dans les scripts, vous devez toujours utiliser

mv -- "$filename"

au lieu d'un mv "$filename"nom de fichier simple ou, pire encore, non cité.

slhck
la source
3
Impressionnant. C'est vraiment bon à savoir
Bruno9779
18

mkdir ./-p

Gardez à l'esprit que la plupart des autres programmes devraient utiliser le même "truc".

Daniel B
la source