J'ai utilisé mv ./*/* pour aplatir un répertoire sur un système de fichiers ntfs, sans ajouter. À la fin de la commande, maintenant tous mes fichiers sont partis

Comment puis-je récupérer ces fichiers?

J'ai utilisé: mv ./*/* quand il était censé être mv ./*/* . Maintenant, tous mes fichiers sont partis.

Je ne pense pas que vos fichiers sont perdus; Cela aurait dû se produire:

Supposons la structure suivante (dirs marqués par / )

 . |-- a/ | |-- a1 | |-- a2 | |-- a3 | `-- a4 |-- b/ | |-- b1 | |-- b2 | |-- b3 | `-- b4 |-- c/ `-- d/ |-- d1/ | `-- foo |-- d2/ | `-- foo |-- d3/ | `-- foo `-- d4/ 

Tout d'abord, rappelez-vous qu'avec Un * x not mv étend les caractères génériques, mais le shell :

  • Si vous tapez mv ./*/* . mv /a/a1 ./a/a2 ./a/a3 ./a/a4 ./b/b1 ./b/b2 ./b/b3 ./b/b4 ./d/d1 ./d/d2 ./d/d3 ./d/d4 . s'élargit à mv /a/a1 ./a/a2 ./a/a3 ./a/a4 ./b/b1 ./b/b2 ./b/b3 ./b/b4 ./d/d1 ./d/d2 ./d/d3 ./d/d4 . Et mv fera ce que vous voulez, car la cible (c'est-à-dire le dernier argument) est un répertoire. Tout (c'est-à-dire tous les fichiers / dirs donnés en tant qu'experts sauf le dernier) est déplacé dans le répertoire actuel ( . ).
  • Si vous tapez mv ./*/* this_is_a_file qui est étendu à mv /a/a1 ./a/a2 ./a/a3 ./a/a4 ./b/b1 ./b/b2 ./b/b3 ./b/b4 ./d/d1 ./d/d2 ./d/d3 ./d/d4 this_is_a_file et mv refuse de faire quoi avec mv: target „this_is_a_file“ is not a directory . Rien n'est écrasé ou déplacé.

Maintenant, à votre commande: mv ./*/* s'élargit à mv /a/a1 ./a/a2 ./a/a3 ./a/a4 ./b/b1 ./b/b2 ./b/b3 ./b/b4 ./d/d1 ./d/d2 ./d/d3 ./d/d4 . Comme vous pouvez le voir dans mon exemple, il se trouve que le dernier argument est un répertoire, ce qui est bien pour mv et tout y est déplacé – et vous finissez avec cet arbre:

 . |-- a/ |-- b/ |-- c/ `-- d/ `-- d4/ |-- a1 |-- a2 |-- a3 |-- a4 |-- b1 |-- b2 |-- b3 |-- b4 |-- d1/ | `-- foo |-- d2/ | `-- foo `-- d3/ `-- foo 

Je suppose que vous avez eu un scénario similaire et c'est pourquoi je crois que vos fichiers ne sont pas partis, mais que nous nous sommes déplacés tout simplement plus loin dans la hiérarchie.

Êtes-vous sûr qu'ils sont partis?

Je crois que le shell aurait élargi ./*/* à une liste de fichiers et de répertoires. Et si le dernier élément de cette liste était un répertoire, la commande mv aurait utilisé comme destination.

Si vous avez effectué une sauvegarde d'abord, rétablissez la sauvegarde. Sinon, essayez un outil comme NTFS Undelete; Vous ne recevrez presque certainement tout, mais vous obtiendrez probablement la plupart des choses.