"Fichier mv" et maintenant il manque

32

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?

John
la source
find / -iname thefilename -print peut être ?
Sergiy Kolodyazhnyy
@Serg Avec thefilenamele nom d'origine des fichiers, cette findcommande ne la trouvera pas sous le nouveau nom.
Eliah Kagan
Je m'en suis rendu compte juste après avoir posté le commentaire. Ma réponse initiale si un fichier est manquant est d'utiliser find, mais ce que je ne savais pas, c'est que l'op a été renommé au lieu de le déplacer
Sergiy Kolodyazhnyy le

Réponses:

70

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

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

Laissez-moi le décomposer, vous avez couru mv filename ..\.., les deux premiers points signifieraient le répertoire parent si c'était ../, mais vous avez utilisé une barre oblique inversée ..\qui indique shell pour échapper au caractère suivant, mais un point .n'a pas de signification spéciale à shell. Donc, il le traitera comme un littéral .et le dernier sera .également ajouté, donc vous aurez quatre points ....comme un nom de fichier.

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

heemayl
la source
2
Hahaha ... ne me suis jamais pensé. Le voilà: "....". Merci! Je suppose qu'il a interprété le premier point comme le point .hideme.
Jean
2
Puis-je suggérer la -A(avec un A majuscule). Il fait la même chose que ls -amais exclut .et ...
Paddy Landau
13

Exécuter mv .... filenamepour le renommer. ( Cela mv ..\.. filenamefonctionnerait aussi, mais \c'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, .et les ..entrées sont présentes dans tous les répertoires et se réfèrent aux répertoires « courants » 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 \un 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 le dit , par défaut, la plupart des utilitaires n’affichent pas les fichiers et les répertoires dont le nom commence par un .. Depuis ....commence avec ., courir lssans le drapeau -Aou -ane l'a pas révélé.
Eliah Kagan
la source
1
C'est exactement comme ça que je l'ai trouvé. Je me demandais pourquoi mon "\" n'agissait pas comme une évasion, mais rien ne pouvait s'échapper aussi traité normalement. Logique.
Jean
5

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

Bruce
la source