Potrzebne są dodatkowe informacje. Która platforma?
Jarmund
4
@Jarmund Myślę, że można bezpiecznie założyć * nix, biorąc pod uwagę, że obie wymienione komendy są powszechnymi komendami w systemach uniksowych. W związku z tym myślę, że można bezpiecznie powiedzieć, że większość pocisków działa tak samo. Możemy więc wydedukować wystarczająco dużo, aby dać użyteczną odpowiedź, nawet jeśli dokładna platforma nie jest wyraźnie określona.
Kolejna pułapka, o której warto wspomnieć. NIGDY nie należy uruchamiać mvani cp„ ” na niezaufanych danych. Dzieje się tak, ponieważ „ ” zostaje rozwinięte, a pliki o nazwach takich jak „--verbose” otrzymują argumenty wiersza polecenia. Co zamiast tego użyć:cp ./* anotherFolder
VasyaNovikov
Odpowiedzi:
31
Domyślam się, że bash rozszerza symbol wieloznaczny, a tym samym przenosi każdy folder do ostatniego.
Na przykład:
$ ls
test1 test2 test3 test4
$ mv *
$ ls
test4
$ ls test4
test1 test2 test3
Tutaj mv *jest rozwinięty do mv test1 test2 test3 test4odpowiedniego mv [OPTION]... SOURCE... DIRECTORYformatu. W ten sposób każdy folder jest przenoszony do ostatniego.
To. Nawiasem mówiąc, jeśli chcesz używać *w mv(lub cp), spójrz na ich --target-directoryprzełącznik. Zapewnia to, że nie przeszkadzają ci takie rzeczy.
CVn
2
Jak opisano w @ssssteffff, z mv *, powłoka wykonuje interpretację symboli wieloznacznych z plików w bieżącym katalogu. Jednak zachowanie mvpolecenia zależy od liczby argumentów *. Jeśli są więcej niż dwa argumenty, ostatni argument musi być katalogiem:
mv [OPTION]... SOURCE... DIRECTORY
Więc,
Utworzyłem 5 plików
$ 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
Teraz, jeśli utworzę katalog, który jest ostatnim parametrem rozszerzenia symboli wieloznacznych, to:
$ mkdir 6
$ mv *
$ ls
6
$ ls 6
1 2 3 4 5
Powinieneś dokładnie sprawdzić, jaki był ten ostatni argument.
Jeśli ostatnim argumentem był katalog, dane mogą być bezpieczne.
Jeśli łączna liczba argumentów wyniosła 2, a ostatnim argumentem był katalog, to również twoje dane mogą być bezpieczne.
Jeśli łączna liczba argumentów wynosiła 2, a ostatnim argumentem był plik, to na pewno nie ma drugiego pliku.
mv
anicp
„ ” na niezaufanych danych. Dzieje się tak, ponieważ „ ” zostaje rozwinięte, a pliki o nazwach takich jak „--verbose” otrzymują argumenty wiersza polecenia. Co zamiast tego użyć:cp ./* anotherFolder
Odpowiedzi:
Domyślam się, że bash rozszerza symbol wieloznaczny, a tym samym przenosi każdy folder do ostatniego.
Na przykład:
Tutaj
mv *
jest rozwinięty domv test1 test2 test3 test4
odpowiedniegomv [OPTION]... SOURCE... DIRECTORY
formatu. W ten sposób każdy folder jest przenoszony do ostatniego.źródło
*
wmv
(lubcp
), spójrz na ich--target-directory
przełącznik. Zapewnia to, że nie przeszkadzają ci takie rzeczy.Jak opisano w @ssssteffff, z
mv *
, powłoka wykonuje interpretację symboli wieloznacznych z plików w bieżącym katalogu. Jednak zachowaniemv
polecenia zależy od liczby argumentów*
. Jeśli są więcej niż dwa argumenty, ostatni argument musi być katalogiem:Więc,
Utworzyłem 5 plików
Teraz, jeśli utworzę katalog, który jest ostatnim parametrem rozszerzenia symboli wieloznacznych, to:
Powinieneś dokładnie sprawdzić, jaki był ten ostatni argument.
Czy na pewno nie widziałeś takiego błędu?
źródło