web-dev-qa-db-fra.com

"fichier mv" et maintenant il manque

Dans une fenêtre de terminal, j'ai tapé:

mv filename ..\..      [Note the wrong slash.]

Maintenant je ne le trouve pas. Disparu. J'ai effectué des recherches et examiné des fichiers supprimés récupérables. Rien. Poof. Me sert juste pour utiliser une machine Windows juste avant.

Quelqu'un sait où il aurait pu aller?

32
John

Il n’est allé nulle part, c’est dans le répertoire courant. Il a été renommé .... (quatre points).

Comme tout nom de fichier ayant un . devant est traité comme un fichier caché, il est donc devenu caché. Donc, si vous faites ls, vous ne le trouverez pas. Comme toujours, vous avez besoin de l'option -a (ou -A) de ls pour afficher les fichiers cachés, à savoir ls -a (ou ls -A).

Laissez-moi le décomposer, vous avez exécuté mv filename ..\.., les deux premiers points signifieraient le répertoire parent s'il était ../, mais vous avez utilisé la barre oblique inverse ..\ qui indique à Shell d'échapper au caractère suivant, mais un point . n'a pas de signification particulière pour Shell. Ainsi, il le traitera comme un . littéral et le dernier . sera également ajouté. Vous aurez donc quatre points .... en tant que nom de fichier.

Pour revenir au nom précédent (d'origine), exécutez mv .... filename.

71
heemayl

Exécutez mv .... filename pour le renommer. (mv ..\.. filename fonctionnerait aussi, mais le \ est superflu - comme c'était le cas dans votre commande d'origine.)

  • Le fichier n'a pas été supprimé, c'est pourquoi la recherche de fichiers supprimés récupérables ne l'a pas trouvé.
  • Comme dans Windows, les entrées . et .. sont présentes dans chaque répertoire et font référence aux répertoires "actuel" et "parent", respectivement. Mais contrairement à Windows, les séquences de plus de deux points n’ont aucune signification particulière. Bien que ce soit inhabituel, vous êtes parfaitement libre de nommer un fichier ordinaire avec un nom composé uniquement de points, à condition qu'il soit long d'au moins trois points.
  • Contrairement à Windows, dans Ubuntu, le shell utilise \ en tant que caractère d'échappement, garantissant que le shell traite littéralement le caractère suivant plutôt que de lui attribuer une signification particulière. Le caractère . n'a pas de signification particulière dans le shell (en particulier, le shell n'est pas responsable de la mise en œuvre des entrées . et ..). Par conséquent, dans votre commande, \. était équivalent à ..
  • Comme heemayl dit , par défaut, la plupart des utilitaires ne montrent pas les fichiers et les répertoires dont le nom commence par .. Étant donné que .... commence par ., l'exécution de ls sans l'indicateur -A ou -a ne l'a pas révélé.
13
Eliah Kagan

il est toujours dans le même répertoire, juste un fichier 'caché' maintenant. Vous pouvez le récupérer par "mv .... nomfichier".

5
Bruce