12

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

mv *

du -hs 

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

2 ответа2

30

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

Например:

$ ls
test1  test2  test3  test4

$ mv *

$ ls
test4

$ ls test4
test1  test2  test3

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

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

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

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

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

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

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

 mv: target ‘5’ is not a directory`

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .