Apa yang terjadi ketika saya “mv *”? Tidak ada kesalahan yang ditampilkan dan sekarang hanya satu folder yang tersisa. Mengapa?

12

Perintah yang dijalankan adalah "mv space *" dalam folder dengan 14 GB data.

mv *

du -hs 

sama, kemana perginya 14 GB data? Apa yang telah saya lakukan?

pengguna3032965
sumber
Dibutuhkan lebih banyak informasi. Platform yang mana?
Jarmund
4
@ Jarmund Saya pikir aman untuk mengasumsikan beberapa * nix, mengingat kedua perintah yang disebutkan adalah perintah umum pada sistem mirip Unix. Dalam hal ini, saya pikir aman untuk mengatakan bahwa kebanyakan cangkang bekerja sama. Jadi kita dapat menyimpulkan cukup untuk memberikan jawaban yang berguna meskipun platform yang tepat tidak secara eksplisit dinyatakan.
CVn
Perangkap lain lagi. Anda TIDAK PERNAH harus menjalankan mvatau cpdengan " " pada data yang tidak dipercaya. Itu karena " " diperluas, dan file dengan nama seperti "--verbose" mendapatkan argumen baris perintah. Apa yang harus digunakan sebagai gantinya:cp ./* anotherFolder
VasyaNovikov

Jawaban:

30

Dugaan saya adalah bahwa bash memperluas wildcard, dan dengan demikian memindahkan setiap folder ke folder terakhir Anda.

Sebagai contoh:

$ ls
test1  test2  test3  test4

$ mv *

$ ls
test4

$ ls test4
test1  test2  test3

Di sini, mv *diperluas mv test1 test2 test3 test4sesuai dengan mv [OPTION]... SOURCE... DIRECTORYformat. Dengan demikian, setiap folder dipindahkan ke yang terakhir.

ssssteffff
sumber
9
Ini. Omong-omong, jika Anda ingin menggunakan *dalam mv(atau cp) maka lihatlah --target-directorysaklar mereka . Ini memastikan bahwa Anda tidak mendapatkan sedikit dari hal-hal seperti ini.
CVn
2

Seperti dijelaskan oleh @ssssteffff, dengan mv *, shell melakukan ekspansi wildcard dari file di direktori saat ini. Namun perilaku mvperintah tergantung pada berapa banyak argumen *berkembang. Jika ada lebih dari dua argumen, maka argumen terakhir harus berupa direktori:

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

Begitu,

Saya membuat 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

Sekarang jika saya membuat direktori yang datang sebagai parameter terakhir untuk ekspansi wild-card, maka:

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

Anda harus memeriksa ulang apa argumen terakhir itu.

  • Jika argumen terakhir adalah direktori, maka data Anda mungkin aman.
  • Jika jumlah total argumen adalah 2, dan argumen terakhir adalah direktori, maka juga data Anda mungkin aman.
  • Jika jumlah total argumen adalah 2, dan argumen terakhir adalah sebuah file, maka file kedua pasti hilang.

Apakah Anda yakin tidak melihat kesalahan seperti ini?

 mv: target ‘5’ is not a directory`
tuxdna
sumber