Che cosa è successo quando "mv *"? Non sono stati mostrati errori e ora è rimasta solo una cartella. Perché?


12

Il comando eseguito era "mv space *" in una cartella con 14 GB di dati.

mv *

du -hs 

è lo stesso, quindi dove sono finiti i 14 GB di dati? Cosa ho fatto?


Sono necessarie ulteriori informazioni. Quale piattaforma?
Jarmund,

4
@Jarmund Penso che sia sicuro assumere * nix, considerando che entrambi i comandi citati sono comandi comuni su sistemi simili a Unix. A questo proposito, penso che sia sicuro dire che la maggior parte delle shell funzionano allo stesso modo. Quindi possiamo dedurre abbastanza per dare una risposta utile anche se la piattaforma esatta non è esplicitamente dichiarata.
un CVn il


Un'altra trappola da menzionare. Non eseguire MAI mvo cpcon " " dati non attendibili. Questo perché " " viene espanso e i file con nomi come "--verbose" ottengono argomenti da riga di comando. Cosa usare invece:cp ./* anotherFolder
VasyaNovikov,

Risposte:


30

La mia ipotesi è che bash espanda il carattere jolly e quindi sposta tutte le cartelle nell'ultima.

Per esempio:

$ ls
test1  test2  test3  test4

$ mv *

$ ls
test4

$ ls test4
test1  test2  test3

Qui, mv *viene espanso in mv test1 test2 test3 test4corrispondenza del mv [OPTION]... SOURCE... DIRECTORYformato. Pertanto, ogni cartella viene spostata nell'ultima.


9
Questo. A proposito, se vuoi usare *un mv(o cp), dai un'occhiata al loro --target-directoryinterruttore. Ti assicura di non essere morso da cose come questa.
un CVn il

2

Come descritto da @ssssteffff, con mv *, la shell sta eseguendo l'espansione jolly dai file nella directory corrente. Tuttavia, il comportamento del mvcomando dipende da quanti argomenti si *espande. Se sono presenti più di due argomenti, l'ultimo argomento deve essere una directory:

   mv [OPTION]... SOURCE... DIRECTORY

Così,

Ho creato 5 file

$ touch 1 2 3 4 5
$ ls
1  2  3  4  5
$ mv *
mv: target ‘5’ is not a directory
$ ls
1  2  3  4  5

Ora, se creo una directory che arriva come ultimo parametro all'espansione con caratteri jolly, allora:

$ mkdir 6
$ mv *
$ ls
6
$ ls 6
1  2  3  4  5

Dovresti ricontrollare quale fosse l'ultimo argomento.

  • Se l'ultimo argomento era una directory, i tuoi dati sono forse al sicuro.
  • Se il numero totale di argomenti fosse 2 e l'ultimo argomento fosse una directory, allora anche i tuoi dati potrebbero essere al sicuro.
  • Se il numero totale di argomenti era 2 e l'ultimo argomento era un file, il secondo file è sparito di sicuro.

Sei sicuro di non aver visto l'errore in questo modo?

 mv: target ‘5’ is not a directory`
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.