touch: não pode tocar em `foo ': nenhum arquivo ou diretório

21

O que poderia causar falha no toque com essa mensagem de erro?

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

Observe que um erro devido a permissões incorretas parece diferente:

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

Respostas:

21

A sequência a seguir causa essa mensagem de erro:

$ mkdir foo
$ cd foo

Em outro terminal:

$ rm -r foo

No terminal anterior:

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

Obviamente, outros eventos que também resultam na invalidação do diretório de trabalho atual (CWD) de um processo que tenta criar um arquivo lá também geram essa mensagem de erro.

maxschlepzig
fonte
2
No meu caso, isso estava ocorrendo devido a um ponto de montagem GlusterFS mal configurado, mas fiquei curioso sobre o caso geral que faria com que isso acontecesse. Esse tipo de pergunta seria realmente um problema de lição de casa em uma classe?
Lorin Hochstein
3
O caso geral é o diretório atual não existente. Além de ter sido excluído, como no exemplo de maxschlepzig, isso só pode acontecer em circunstâncias estranhas, como um sistema de arquivos que se comporta mal (seu caso), ou talvez um mecanismo de segurança como o SELinux tenha tornado o diretório invisível (não sei se o SELinux pode realmente produzir esse efeito).
Gilles 'SO- stop be evil'
@lorin: Bem, em um curso de introdução ao Unix na universidade, fizemos esse tipo de perguntas como parte de tarefas de casa (porque, por exemplo, problemas de NFS podem se manifestar em mensagens de erro semelhantes). Apenas pediram por curiosidade ...
maxschlepzig
3
Na resposta original, não há necessidade de outro terminal: rmdir ../foono mesmo terminal deve funcionar. Outra possibilidade, sem se comportando mal sistemas de arquivos: ln -s directory-that-doesnt-exist/foo foo; touch foo.
ephemient 27/10/10
Eu sinto que você deveria editar "Hm, pergunta da lição de casa?" fora da resposta .... É honestamente muito ofensivo. Estou nesta página porque isso realmente aconteceu no meu computador. Mas essa resposta não resolve nada disso. Foi um problema do NFS que a reinicialização corrigiu, mas quero a causa subjacente.
Codetaku 26/03
4

Para mim, estava tentando gravar em um link simbólico que apontava para um arquivo que não estava mais lá:

$ ln -s ~/doomed/file ~/mysymlink
$ rm ~/doomed/file
$ touch ~/mysymlink
$ touch: cannot touch `mysymlink': No such file or directory
antirealm
fonte
Foi isso !! Sentindo-se burro agora! Apenas fazendo um "ls -la" no diretório em que o arquivo deveria ser mostrado imediatamente. Foi "resolv.conf", que apontou para um lugar que, devido à atualização caiu não estava lá ..
stolsvik
1

Outra maneira (mais simples) de acionar a mensagem:

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

Basicamente, tentando criar um arquivo em uma pasta inexistente.

KevinG
fonte
0

Talvez isso ajude alguém no futuro:

Eu tive esse mesmo problema quando removi o único arquivo que existe na minha pasta git rm. Assim, o git removeu a pasta em que eu estava e qualquer tentativa de criar um arquivo aciona esse erro porque a pasta não está mais lá. Então eu tive que recriar a pasta manualmente, entrar nela e executar o touchcomando com sucesso.

Begueradj
fonte