@Jarmund Я думаю, можно предположить, что некоторые * nix, учитывая, что обе упомянутые команды являются общими командами в Unix-подобных системах. В связи с этим, я думаю, можно с уверенностью сказать, что большинство оболочек работают одинаково. Таким образом, мы можем вывести достаточно, чтобы дать полезный ответ, даже если точная платформа явно не указана.
Еще одна ловушка, чтобы упомянуть. Вы никогда не должны запускать mvили cpс " " на ненадежных данных. Это потому, что " " раскрывается, а файлы с такими именами, как "--verbose", получают аргументы командной строки. Что использовать вместо:cp ./* anotherFolder
VasyaNovikov
Ответы:
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формата. Таким образом, каждая папка перемещается в последнюю.
Эта. Кстати, если вы хотите использовать *в 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
Теперь, если я создам каталог, который будет последним параметром расширения подстановочных знаков, то:
$ mkdir 6
$ mv *
$ ls
6
$ ls 6
1 2 3 4 5
Вы должны дважды проверить, что это был за последний аргумент.
Если последний аргумент был каталогом, то ваши данные, возможно, в безопасности.
Если общее количество аргументов было 2, а последний аргумент был каталогом, то ваши данные также могут быть в безопасности.
Если общее количество аргументов равнялось 2, а последний аргумент был файлом, то второй файл пропал наверняка.
Вы уверены, что не видели ошибку что-то вроде этого?
mv
илиcp
с " " на ненадежных данных. Это потому, что " " раскрывается, а файлы с такими именами, как "--verbose", получают аргументы командной строки. Что использовать вместо:cp ./* anotherFolder
Ответы:
Я предполагаю, что bash расширяет подстановочный знак и таким образом перемещает каждую папку в вашу последнюю.
Например:
Здесь
mv *
расширяется доmv test1 test2 test3 test4
соответствующегоmv [OPTION]... SOURCE... DIRECTORY
формата. Таким образом, каждая папка перемещается в последнюю.источник
*
вmv
(илиcp
), то посмотрите на их--target-directory
переключатель. Это гарантирует, что вы не получите ничего подобного.Как описано @ssssteffff, с
mv *
помощью оболочки выполняется расширение по шаблону из файлов в текущем каталоге. Однако поведениеmv
команды зависит от того, на сколько аргументов*
распространяется. Если аргументов более двух, то последним аргументом должен быть каталог:Так,
Я создал 5 файлов
Теперь, если я создам каталог, который будет последним параметром расширения подстановочных знаков, то:
Вы должны дважды проверить, что это был за последний аргумент.
Вы уверены, что не видели ошибку что-то вроде этого?
источник