Що сталося, коли я “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.