Что случилось, когда я "mv *"? Ошибки не отображались, и теперь осталась только одна папка. Зачем?

Выполненная команда была "mv space *" в папке с 14 ГБ данных.

mv *

du -hs 

то же самое, куда ушли 14 ГБ данных? Что я сделал?

2 ответа

Решение

Я предполагаю, что bash расширяет подстановочный знак и таким образом перемещает каждую папку в вашу последнюю.

Например:

$ ls
test1  test2  test3  test4

$ mv *

$ ls
test4

$ ls test4
test1  test2  test3

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

Как описано @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

Теперь, если я создам каталог, который будет последним параметром расширения подстановочных знаков, то:

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

Вы должны дважды проверить, что это был за последний аргумент.

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

Вы уверены, что не видели ошибку, как это?

 mv: target ‘5’ is not a directory`
Другие вопросы по тегам