2013-06-27 3 views
0

J'ai essayé mkdir -p /a/b/c sous AIX. Lorsque a et b n'existait pas, cette commande a créé a, b et c. Mais quand a et b existe à la fois, il donne une erreurmkdir -p renvoie l'erreur "fichier existe"

Impossible de créer/a/b./A/b: Le fichier existe

et renvoie un code d'erreur 2.

Toute aide à ce sujet?

+0

Toute aide avec quoi? Quel est le problème? C'est la sortie prévue. En plus de cela, ce n'est pas sur le sujet à Stack Overflow. Vous devriez le republier sur [Unix & Linux] (http://unix.stackexchange.com) et supprimer la question ici. –

+0

Il y a un fichier dans '/ a/b/c', donc vous ne pouvez pas créer de répertoire. Vérifiez-le avec 'fichier/a/b/c'. – fedorqui

+1

Êtes-vous certain que 'a/b' est un répertoire? Si tel est le cas, ceci est conforme à la non-posix ([Chaque opérande dir qui nomme un répertoire existant doit être ignoré sans erreur.] (Http://pubs.opengroup.org/onlinepubs/009695299/utilities/mkdir.html)) – Kevin

Répondre

0

Je pense que vous parlez de ce scénario:

bash-2.02# mkdir -p /a/c/d 
bash-2.02# rm -rf /a/c/d 
bash-2.02# mkdir -p /a/c/d 
mkdir: cannot create /a/c 
/a/c: File exists 
bash-2.02# echo $? 
2 
bash-2.02# 
+1

oui, même si "a" et "b" sont des répertoires, il dit "fichier existe" et j'ai lancé la commande "mkdir -p/a/b/c", toujours l'erreur dit "/ a/b existe". Il n'y a pas de fichier avec le même nom.Je pense que mkdir -p devrait créer chaque répertoire dans le chemin (s'il n'y a pas de fichier avec le même nom) – user785461

+4

@ vik123 Comment cela répond-il à la question? – Bill

2

Je viens de tomber sur un symptôme semblable - sauf qu'il était un point de montage à distance cassé (dans ce cas, en utilisant sshfs) et n'a rien à voir avec un fichier étant "la manière":

$ mkdir -p /mnt/sshfs-remote 
mkdir: cannot create directory `/mnt/sshfs-remote': File exists 
$ ls -lscrath /mnt/sshfs-remote 
/bin/ls: cannot access /mnt/sshfs-remote: No such file or directory 
$ ls -lscrath /mnt 
/bin/ls: cannot access /mnt/sshfs-remote: No such file or directory 
total 4.0K 
    ? d????????? ? ? ?  ?   ? sshfs-remote/ 

A umount * résoudre notre problème. J'ai également ajouté une exception dans le script qui a déclenché l'erreur pour essayer aussi umount.

$ umount -l /mnt/sshfs-remote ; mount /mnt/sshfs-remote 
$ ls -lsahd /mnt/sshfs-remote 
4.0K drwxr-xr-x 1 root root 6 Mar 11 09:20 /mnt/sshfs-remote/ 
$ mkdir -p /mnt/sshfs-remote 
$ echo $? 
0 

* En cas où quelqu'un se demande sur le -l je sur umount: Il est probablement inutile - mais sur des supports distants que je l'ai trouvé à être un moyen plus propre/plus facile de « get avec ça ". A partir de la page de manuel umount:

-l, --lazy 
      Lazy unmount. Detach the filesystem from the file hierarchy now, and clean up all references to this filesystem as soon 
      as it is not busy anymore. (Requires kernel 2.4.11 or later.) 
+1

Cela fonctionne, pour moi, j'ai dû utiliser 'umount -f" chemin complet de la dir "'. C'était bizarre, il n'affichera même pas le dossier qui a été monté en faisant 'ls'. – codenamezero

0

J'ai eu cela se produire en utilisant le système de fichiers Parallels. La machine virtuelle se plaignait d'un répertoire existant, même si "ls" ne pouvait pas le voir. Quand je cd'ed dans le répertoire, il l'a permis, mais alors ls échouerait. Donc, il semblait être un bug de mise en cache du système de fichiers. Je l'ai résolu en allant sur la machine hôte et en créant le répertoire avec un fichier, puis en retournant à la machine virtuelle et en supprimant le répertoire. Après cela, le système de fichiers de la machine virtuelle a été synchronisé correctement et j'ai pu créer le répertoire avec mkdir comme d'habitude.

Sur VM:

> mkdir -p build/a/b/c <-- failed with "file exists" 
> cd build    <-- allowed 
> ls     <-- failed 

Sur la machine hôte:

> mkdir build 
> touch build/foo 

Sur VM:

> rm -rf build 
> mkdir -p build/a/b/c <-- Success 
Questions connexes