Přesouvání souborů v Linuxu se může zdát poměrně jednoduché, ale existuje více možností, než většina realizovat. Tento článek učí začátečníky, jak přesunout soubory v GUI a příkazového řádku, ale také vysvětluje, co se vlastně děje pod kapotou, a adresy, možnosti příkazového řádku, které mnoho zkušenosti mají uživatelé jen zřídka prozkoumal.
pohybující se co?
než se ponoříte do pohyblivých souborů, stojí za to se blíže podívat na to, co se skutečně děje při pohybu objektů systému souborů., Když je soubor vytvořen, je přiřazen k inode,což je pevný bod v souborovém systému, který se používá pro ukládání dat. Můžete to, co inode mapy do souboru pomocí příkazu ls:
$ ls --inode example.txt
7344977 example.txt
Při přesunu souboru, ne ve skutečnosti přesunout data z jednoho inode na další, jen přiřadit objekt souboru nový název nebo cestu k souboru. Ve skutečnosti si soubor zachovává svá oprávnění, když je přesunut, protože přesunutí souboru se nemění ani znovu nevytváří.
inody souborů a adresářů nikdy neznamenají dědičnost a jsou diktovány samotným souborovým systémem., Přiřazení Inode je sekvenční na základě toho, kdy byl soubor vytvořen a je zcela nezávislý na tom, jak organizujete počítač. Soubor „uvnitř“ adresáře může mít nižší inodové číslo než jeho nadřazený adresář, nebo vyšší. Například:
$ mkdir foo
$ mv example.txt foo
$ ls --inode
7476865 foo
$ ls --inode foo
7344977 example.txt
při přesunu souboru z jednoho pevného disku na druhý se však Inoda velmi pravděpodobně změní. K tomu dochází, protože nová data musí být zapsána do nového souborového systému. Z tohoto důvodu je v Linuxu akt přesunu a přejmenování souborů doslova stejná akce., Ať už přesunete soubor do jiného adresáře nebo do stejného adresáře s novým názvem, obě akce jsou prováděny stejným základním programem.
tento článek se zaměřuje na přesun souborů z jednoho adresáře do druhého.
pohyb myší
GUI je přátelská a pro většinu lidí známá vrstva abstrakce na vrcholu komplexní sbírky binárních dat. Je to také první a nejintuitivnější způsob, jak přesunout soubory na Linuxu. Pokud jste zvyklí na zážitek z plochy, v obecném smyslu, pravděpodobně už víte, jak přesouvat soubory po pevném disku., V GNOME desktop, například, výchozí akci, když přetažením souborů z jednoho okna do druhého, je-li soubor přesunout, spíše než kopírovat to, tak to je pravděpodobně jedním z nejvíce intuitivní, akce na ploše:
Dolphin správce souborů v KDE Plasma desktop výchozí vyzve uživatele k akci. Podržením klávesy Shift při tažení souboru síly, pohyb, akce:
Pohybující se na příkazovém řádku
shell příkaz určeny pro přesouvání souborů na Linuxu, BSD, Illumos, Solaris a MacOS je mv., Jednoduchý příkaz s předvídatelným syntaxe, mv <zdroj> <cíl> pohybuje zdrojový soubor do zadaného cíle, každý definovaný buď absolutní nebo relativní cestu k souboru. Jak již bylo zmíněno dříve, mv je pro uživatele POSIX takový společný příkaz, že mnoho jeho dalších modifikátorů je obecně neznámých, takže tento článek vám přináší několik užitečných modifikátorů, ať už jste noví nebo zkušení.,
ne všechny příkazy mv byly napsány stejnými lidmi, ačkoli, takže můžete mít GNU mv, BSD mv nebo Sun MV, v závislosti na vašem operačním systému. Příkaz možnosti se liší od implementace k implementaci (BSD mv nemá dlouhou možnosti vůbec), takže odkazovat na vaše mv manuálové stránky, aby viděli, co je podporované, nebo nainstalovat preferovanou verzi místo (to je luxus open source).,
Přesouvání souboru
přesunout soubor z jedné složky do jiné, s mv, pamatovat syntaxe mv <zdroj> <cíl>. Například přesunout příklad souboru.txt do adresáře dokumentů:
$ touch example.txt
$ mv example.txt ~/Documents
$ ls ~/Documents
example.txt
stejně jako při přesunu souboru přetažením na ikonu složky Tento příkaz nenahrazuje dokumenty příkladem.txt. Místo toho mv zjistí, že dokumenty jsou složkou, a umístí příklad.txt soubor do něj.,
můžete také pohodlně, přejmenujte soubor, jak budete pohybovat to:
$ touch example.txt
$ mv example.txt ~/Documents/foo.txt
$ ls ~/Documents
foo.txt
to je důležité, protože to vám umožní přejmenovat soubor, i když nechcete, aby přesunout na jiné místo, tak jako:
$ touch example.txt$ mv example.txt foo2.txt$ lsfoo2.txt
Přesunutí adresáře
mv příkaz nemá rozlišení souboru od adresáře cestě cp., Můžete přesunout adresář nebo soubor se stejnou syntaxí:
$ touch file.txt
$ mkdir foo_directory
$ mv file.txt foo_directory
$ mv foo_directory ~/Documents
Přesouvání souboru bezpečně
Pokud zkopírujete soubor do adresáře, kde je soubor se stejným názvem již existuje, mv příkaz nahrazuje cílový soubor s jedním se pohybujete, ve výchozím nastavení. Toto chování se nazývá clobbering a někdy je to přesně to, co máte v úmyslu. Jindy to tak není.
některé distribuce alias (nebo můžete napsat svůj vlastní) mv na MV — interactive, který vás vyzve k potvrzení. Někteří ne., Buď jak buď, můžete použít –interactive nebo -mám možnost zajistit, že se mv neptá na potvrzení v případě, že dva soubory se stejným názvem jsou v konfliktu:
$ mv --interactive example.txt ~/Documents
mv: overwrite '~/Documents/example.txt'?
Pokud nechcete, aby ručně zasáhnout, použít –no-hadry nebo -n místo. Tato vlajka tiše odmítá akci move v případě konfliktu. V tomto příkladu soubor s názvem příklad.,txt již existuje v ~/Dokumenty, takže to není dostat se přestěhoval z aktuálního adresáře jako pokyn:
$ mv --no-clobber example.txt ~/Documents
$ ls
example.txt
Pohybující se zálohami
Pokud používáte GNU mv, tam jsou možnosti zálohování nabízí další způsob bezpečného pohybu. Vytvořit zálohu všech protichůdných určení souboru, použijte volby-b:
$ mv -b example.txt ~/Documents
$ ls ~/Documents
example.txt example.txt~
Tento příznak zajistí, že mv dokončí pohyb, akci, ale také chrání všechny pre-existující soubor v cílovém umístění.,
Další možností GNU backup je — backup, který má argument definující, jak je záložní soubor pojmenován:
- existující: pokud již v cíli existují číslované zálohy, vytvoří se číslovaná záloha. V opačném případě se používá jednoduchá schéma.
- none: nevytváří zálohu, i když je nastavena –backup. Tato možnost je užitečná pro přepsání aliasu MV, který nastavuje možnost zálohování.
- očíslované: připojí cílový soubor číslem.,
- simple: připojí cílový soubor s~, který lze pohodlně skrýt z vašeho denního zobrazení pomocí volby — ignore-backups pro ls.
například:
výchozí schéma zálohování lze nastavit pomocí proměnné prostředí VERSION_CONTROL. Můžete nastavit proměnné prostředí v ~/.bashrc soubor, nebo dynamicky, než váš příkaz:
– možnost zálohování stále respektuje –interactive nebo -mám možnost, tak to ještě vyzve k přepsání cílového souboru, i když to vytvoří zálohu před tím:
můžete přepsat -jsem s –force, nebo -f možnost.,
volba — backup není k dispozici v BSD mv.
Pohybuje mnoho souborů najednou
Když se pohybuje více souborů, mv zachází konečný adresář s názvem jako cíl:
$ mv foo bar baz ~/Documents
$ ls ~/Documents
foo bar baz
Pokud je poslední položka není adresáře, mv vrátí chybu:
$ mv foo bar baz
mv: target 'baz' is not a directory
syntaxe GNU mv je poměrně flexibilní., Pokud jste schopni poskytnout mv příkaz s cíli jako poslední argument, použijte –target-directory nebo -t možnosti:
$ mv --target-directory=~/Documents foo bar baz
$ ls ~/Documents
foo bar baz
Toto je užitečné zejména při sestavování mv příkazy z výstupu nějakého jiného příkazu, například příkazu find, xargs, nebo GNU Parallel.
pohybující se na základě mtime
s GNU mv můžete definovat akci přesunu na základě toho, zda je přesunutý soubor novější než cílový soubor, který by nahradil., Tuto možnost je možné s –update nebo volbou-u, a není k dispozici v BSD mv:
Tento výsledek je založen výlučně na soubory‘ čas modifikace, ne na porovnání dvou souborů, takže ji používejte jen s opatrností. Je snadné oklamat mv pouhým dotykovým příkazem:
je zřejmé, že to není nejinteligentnější aktualizační funkce, která je k dispozici, ale nabízí základní ochranu před přepsáním nedávných dat.
Moving
existuje více způsobů, jak přesunout data než jen příkaz mv, ale jako výchozí program pro práci je mv dobrou univerzální volbou., Nyní, když víte, jaké možnosti máte k dispozici, můžete použít MV chytřejší než kdy předtím.