Что случилось, когда я "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`