touch: no se puede tocar 'foo': no ​​existe tal archivo o directorio

21

¿Qué podría causar que el toque falle con este mensaje de error?

touch: cannot touch `foo': No such file or directory

Tenga en cuenta que un error debido a permisos incorrectos se ve diferente:

touch: cannot touch `foo': Permission denied
Lorin Hochstein
fuente

Respuestas:

21

La siguiente secuencia causa este mensaje de error:

$ mkdir foo
$ cd foo

En otra terminal:

$ rm -r foo

En la terminal anterior:

$ touch x
touch: cannot touch `x': No such file or directory

Por supuesto, otros eventos que también resultan en la invalidación del directorio de trabajo actual (CWD) de un proceso que intenta crear un archivo allí también producen este mensaje de error.

maxschlepzig
fuente
2
En mi caso, estaba ocurriendo debido a un punto de montaje GlusterFS mal configurado, pero tenía curiosidad sobre el caso general que haría que esto sucediera. ¿Sería este tipo de pregunta realmente un problema de tarea en una clase?
Lorin Hochstein
3
El caso general es el directorio actual que no existe. Además de haber sido eliminado como en el ejemplo de maxschlepzig, esto solo puede suceder en circunstancias extrañas como un mal funcionamiento del sistema de archivos (su caso), o tal vez un mecanismo de seguridad como SELinux ha hecho que el directorio sea invisible (no sé si SELinux realmente puede producir este efecto).
Gilles 'SO- deja de ser malvado'
@lorin: Bueno, en un curso de introducción de Unix en la universidad hicimos ese tipo de preguntas como parte de las tareas (por ejemplo, los problemas de NFS pueden manifestarse en mensajes de error similares). Solo he pedido por curiosidad ...
maxschlepzig
3
En la respuesta original, no es necesario otro terminal: rmdir ../fooen el mismo terminal debería funcionar. Otra posibilidad, sin misbehaving sistemas de archivos: ln -s directory-that-doesnt-exist/foo foo; touch foo.
Ephemient
Siento que deberías editar "Hm, ¿pregunta de tarea?" fuera de la respuesta ... Sinceramente, es muy ofensivo. Estoy en esta misma página porque esto realmente sucedió en mi computadora. Pero esta respuesta no resuelve eso en absoluto. Fue un problema de NFS que el reinicio se solucionó, pero quiero la causa subyacente.
codetaku
4

Para mí, estaba tratando de escribir en un enlace simbólico que apuntaba a un archivo que ya no estaba allí:

$ ln -s ~/doomed/file ~/mysymlink
$ rm ~/doomed/file
$ touch ~/mysymlink
$ touch: cannot touch `mysymlink': No such file or directory
antirealm
fuente
¡¡Eso fue todo!! Sintiéndose tonto ahora! Simplemente haciendo un "ls -la" en el directorio se suponía que el archivo debía mostrarse de inmediato. Fue "resolv.conf", que apuntaba a un lugar que debido a la actualización
bloqueada
1

Otra forma (más simple) de activar el mensaje:

$ mkdir foo
$ touch foo/bar/baz.txt
touch: cannot touch 'foo/bar/baz.txt': No such file or directory

Básicamente tratando de crear un archivo en una carpeta inexistente.

KevinG
fuente
0

Quizás esto ayude a alguien en el futuro:

Recibí este mismo problema cuando eliminé el único archivo que existe en mi carpeta git rm. Por lo tanto, git eliminó la carpeta en la que estaba, y cualquier intento de crear un archivo desencadena este error porque la carpeta ya no está allí. Así que tuve que volver a crear la carpeta manualmente, entrar y ejecutar el touchcomando con éxito.

Begueradj
fuente