przenoszenie plików w Linuksie może wydawać się stosunkowo proste, ale dostępnych jest więcej opcji niż większość. Ten artykuł uczy początkujących, jak przenosić pliki w GUI i wierszu poleceń, ale także wyjaśnia, co dzieje się pod maską, i odnosi się do opcji wiersza poleceń, które wielu doświadczonych użytkowników rzadko eksplorowało.

przeprowadzki co?

zanim zagłębimy się w przenoszenie plików, warto przyjrzeć się bliżej temu, co tak naprawdę dzieje się podczas przenoszenia obiektów systemu plików., Po utworzeniu pliku jest on przypisywany do i-węzła, który jest stałym punktem w systemie plików używanym do przechowywania danych. Możesz to, co i-węzeł mapuje do pliku za pomocą polecenia ls:

$ ls --inode example.txt
7344977 example.txt

gdy przenosisz plik, nie przenosisz danych z jednego i-węzła do drugiego, przypisujesz tylko obiektowi file nową nazwę lub ścieżkę do pliku. W rzeczywistości plik zachowuje swoje uprawnienia, gdy jest przenoszony, ponieważ przeniesienie pliku nie zmienia go ani nie tworzy go ponownie.

i-węzły plików i katalogów nigdy nie implikują dziedziczenia i są podyktowane przez sam system plików., Przypisanie i-węzła jest sekwencyjne w zależności od tego, kiedy plik został utworzony i jest całkowicie niezależne od tego, w jaki sposób organizujesz komputer. Plik „wewnątrz” katalogu może mieć niższy numer i-węzła niż jego Katalog nadrzędny lub wyższy. Na przykład:

$ mkdir foo
$ mv example.txt foo
$ ls --inode
7476865 foo
$ ls --inode foo
7344977 example.txt

podczas przenoszenia pliku z jednego dysku twardego na drugi, i-węzeł najprawdopodobniej się zmieni. Dzieje się tak, ponieważ nowe dane muszą być zapisane na nowym systemie plików. Z tego powodu w Linuksie przenoszenie i zmiana nazwy plików jest dosłownie tą samą czynnością., Niezależnie od tego, czy przenosisz plik do innego katalogu, czy do tego samego katalogu o nowej nazwie, obie akcje są wykonywane przez ten sam program.

Ten artykuł skupia się na przenoszeniu plików z jednego katalogu do drugiego.

poruszanie się za pomocą myszy

GUI jest przyjazną i dla większości ludzi znaną warstwą abstrakcji na złożonym zbiorze danych binarnych. Jest to również pierwszy i najbardziej intuicyjny sposób przenoszenia plików na Linuksie. Jeśli jesteś przyzwyczajony do korzystania z pulpitu, w ogólnym sensie, prawdopodobnie już wiesz, jak przenosić pliki na dysku twardym., Na przykład na pulpicie GNOME domyślną akcją podczas przeciągania i upuszczania pliku z jednego okna do drugiego jest przeniesienie pliku, a nie kopiowanie go, więc jest to prawdopodobnie jedna z najbardziej intuicyjnych akcji na pulpicie:

Menedżer plików Dolphin w pulpicie Plazmy KDE domyślnie wyświetla monit o wykonanie danej akcji. Przytrzymanie klawisza Shift podczas przeciągania pliku wymusza akcję move:

poruszanie się po wierszu poleceń

polecenie powłoki przeznaczone do przenoszenia plików w systemach Linux, BSD, Illumos, Solaris i MacOS to mv., Proste polecenie o przewidywalnej składni, mv <source> <destination> przenosi plik źródłowy do określonego miejsca docelowego, każdy zdefiniowany przez absolutną lub względną ścieżkę pliku. Jak wspomniano wcześniej, MV jest tak powszechnym poleceniem dla użytkowników POSIX, że wiele z jego dodatkowych modyfikatorów jest ogólnie nieznanych, więc ten artykuł zwraca uwagę na kilka przydatnych modyfikatorów, niezależnie od tego, czy jesteś nowy, czy doświadczony.,

nie wszystkie polecenia mv zostały napisane przez tych samych ludzi, więc możesz mieć GNU MV, BSD mv lub Sun MV, w zależności od systemu operacyjnego. Opcje poleceń różnią się od implementacji do implementacji (BSD mv nie ma długich opcji w ogóle) więc odnoszą się do strony Man mv, aby zobaczyć, co jest obsługiwane, lub zainstalować preferowaną wersję zamiast (to luksus open source).,

przenoszenie pliku

aby przenieść plik z jednego folderu do drugiego za pomocą mv, pamiętaj o składni mv<źródło><miejsce docelowe. Na przykład, aby przenieść przykład pliku.txt do katalogu dokumentów:

$ touch example.txt
$ mv example.txt ~/Documents
$ ls ~/Documents
example.txt

podobnie jak podczas przenoszenia pliku przez przeciągnięcie i upuszczenie go na ikonę folderu, polecenie to nie zastępuje dokumentów przykładem.txt. Zamiast tego mv wykrywa, że dokumenty są folderem i umieszcza przykład.plik txt do niego.,

Możesz również wygodnie zmienić nazwę pliku podczas przenoszenia:

$ touch example.txt
$ mv example.txt ~/Documents/foo.txt
$ ls ~/Documents
foo.txt

to ważne, ponieważ umożliwia zmianę nazwy pliku nawet wtedy, gdy nie chcesz go przenieść do innej lokalizacji, jak tak:

$ touch example.txt$ mv example.txt foo2.txt$ lsfoo2.txt

przenoszenie katalogu

polecenie mv nie odróżnia pliku Od katalogu tak jak robi to CP., Możesz przenieść katalog lub plik o tej samej składni:

$ touch file.txt
$ mkdir foo_directory
$ mv file.txt foo_directory
$ mv foo_directory ~/Documents

bezpieczne przenoszenie pliku

jeśli skopiujesz plik do katalogu, w którym istnieje plik o tej samej nazwie, polecenie MV domyślnie zastępuje plik docelowy tym, który przenosisz. To zachowanie nazywa się clobbering, a czasami jest to dokładnie to, co zamierzasz. Innym razem nie.

niektóre dystrybucje alias (lub możesz napisać własne) mv do MV — interactive, który prosi o potwierdzenie. Niektórzy nie., Tak czy inaczej, możesz użyć opcji –interactive lub-i, aby upewnić się, że mv prosi o potwierdzenie w przypadku konfliktu dwóch plików o tej samej nazwie:

$ mv --interactive example.txt ~/Documents
mv: overwrite '~/Documents/example.txt'?

Jeśli nie chcesz interweniować ręcznie, użyj zamiast tego –no-clobber lub-n. Flaga ta po cichu odrzuca akcję ruchu w przypadku konfliktu. W tym przykładzie plik o nazwie example.,txt już istnieje w ~ / Documents, więc nie zostanie przeniesiony z bieżącego katalogu zgodnie z instrukcją:

$ mv --no-clobber example.txt ~/Documents
$ ls
example.txt

przenoszenie z backupami

Jeśli używasz GNU MV, istnieją opcje tworzenia kopii zapasowych oferujące inny sposób bezpiecznego przenoszenia. Aby utworzyć kopię zapasową dowolnego kolidującego pliku docelowego, użyj opcji-b:

$ mv -b example.txt ~/Documents
$ ls ~/Documents
example.txt example.txt~

ta flaga zapewnia, że mv zakończy akcję przenieś, ale także chroni każdy wcześniej istniejący plik w lokalizacji docelowej.,

inną opcją kopii zapasowej GNU jest –backup, która pobiera argument określający nazwę pliku kopii zapasowej:

  • existing: jeśli w miejscu docelowym istnieją już ponumerowane kopie zapasowe, to tworzona jest ponumerowana kopia zapasowa. W przeciwnym razie stosuje się prosty schemat.
  • none: nie tworzy kopii zapasowej, nawet jeśli ustawiona jest opcja — backup. Ta opcja jest przydatna do nadpisania aliasu mv, który ustawia opcję kopii zapasowej.
  • numbered: dołącza do pliku docelowego numer.,
  • proste: dodaje plik docelowy za pomocą~, który można wygodnie ukryć w codziennym widoku za pomocą opcji –ignore-backups dla ls.

na przykład:

domyślny schemat tworzenia kopii zapasowych można ustawić za pomocą zmiennej środowiskowej VERSION_CONTROL. Możesz ustawić zmienne środowiskowe w swoim~/.plik bashrc lub dynamicznie przed poleceniem:

opcja –backup nadal respektuje opcję –interactive lub-i, więc nadal prosi Cię o nadpisanie pliku docelowego, nawet jeśli utworzy kopię zapasową przed wykonaniem polecenia:

możesz nadpisać-i za pomocą opcji –force lub-f.,

opcja –backup nie jest dostępna w BSD mv.

przenoszenie wielu plików naraz

podczas przenoszenia wielu plików, MV traktuje ostateczny katalog o nazwie jako miejsce docelowe:

$ mv foo bar baz ~/Documents
$ ls ~/Documents
foo bar baz

Jeśli końcowy element nie jest katalogiem, MV zwraca błąd:

$ mv foo bar baz
mv: target 'baz' is not a directory

składnia GNU MV jest dość elastyczna., Jeśli nie możesz podać polecenia mv z miejscem docelowym jako argumentem końcowym, użyj opcji –target-directory lub-t:

$ mv --target-directory=~/Documents foo bar baz
$ ls ~/Documents
foo bar baz

jest to szczególnie przydatne podczas konstruowania poleceń mv z wyjścia innego polecenia, takiego jak polecenie find, xargs lub GNU Parallel.

przenoszenie na podstawie mtime

z GNU MV możesz zdefiniować akcję przenoszenia na podstawie tego, czy przenoszony plik jest nowszy niż plik docelowy, który ma zastąpić., Opcja ta jest możliwa z opcją –update lub-u i nie jest dostępna w BSD mv:

wynik ten opiera się wyłącznie na czasie modyfikacji plików, a nie na różnicy pomiędzy tymi dwoma plikami, więc używaj jej ostrożnie. Łatwo jest oszukać mv za pomocą zwykłego polecenia dotykowego:

oczywiście nie jest to najbardziej inteligentna dostępna funkcja aktualizacji, ale oferuje podstawową ochronę przed nadpisywaniem ostatnich danych.

przenoszenie

istnieje więcej sposobów przenoszenia danych niż tylko polecenie mv, ale jako domyślny program dla zadania, mv jest dobrą uniwersalną opcją., Teraz, gdy wiesz, jakie opcje masz dostępne, możesz używać mv mądrzej niż kiedykolwiek wcześniej.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *