Що сталося, коли я “mv *”? Помилок не було показано, і тепер залишилася лише одна папка. Чому?


12

Виконана команда була "mv space *" у папці з 14 ГБ даних.

mv *

du -hs 

це те саме, тож куди зникло 14 ГБ даних? Що я зробив?


Потрібна додаткова інформація. Яка платформа?
Ярмунд

4
@Jarmund Я думаю, що можна припустити якийсь * nix, враховуючи, що обидві зазначені команди є загальними командами для Unix-подібних систем. У зв'язку з цим, я думаю, що можна з упевненістю сказати, що більшість снарядів працюють однаково. Тож ми можемо зробити досить, щоб дати корисну відповідь, навіть якщо точна платформа прямо не вказана.
CVn


Ще одна пам’ятка, яку потрібно згадати. НІКОЛИ не слід бігати mvабо cpз " " на ненадійних даних. Це тому, що " " розширюється, а файли з іменами типу "--verbose" отримують аргументи командного рядка. Що використовувати замість цього:cp ./* anotherFolder
VasyaNovikov

Відповіді:


31

Я здогадуюсь, що bash розширює підстановку, і таким чином переміщує кожну папку у вашу останню.

Наприклад:

$ ls
test1  test2  test3  test4

$ mv *

$ ls
test4

$ ls test4
test1  test2  test3

Тут mv *розширено до mv test1 test2 test3 test4відповідного mv [OPTION]... SOURCE... DIRECTORYформату. Таким чином, кожна папка переміщується в останню.


9
Це. До речі, якщо ви хочете використовувати *в mv(або cp), то подивіться на їх --target-directoryперемикач. Це гарантує, що ви не покусаєтесь на такі речі.
CVn

2

Як описано в @ssssteffff, при mv *цьому оболонка робить розширення підстановки з файлів у поточному каталозі. Однак поведінка mvкоманди залежить від того, на скільки аргументів *розширюється. Якщо аргументів більше двох, то останнім аргументом має бути каталог:

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

Так,

Я створив 5 файлів

$ 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

Тепер, якщо я створю каталог, який є останнім параметром для розширення wild-card, тоді:

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

Вам слід двічі перевірити, що це за останній аргумент.

  • Якщо останнім аргументом був каталог, то ваші дані, можливо, безпечні.
  • Якщо загальна кількість аргументів становила 2, а останній аргумент - це каталог, то також ваші дані, можливо, безпечні.
  • Якщо загальна кількість аргументів була 2, а останнім аргументом був файл, то другий файл точно не пішов.

Ви впевнені, що не бачили помилки приблизно подібної?

 mv: target ‘5’ is not a directory`
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.