V tomto stručném průvodci probereme, jak zkopírovat soubor do více adresářů z příkazového řádku pomocí find , cp , echo , xargs a tee příkazy v systému Linux.
Nedávno jsem chtěl zkopírovat některá videa do různých složek na ploše Arch Linuxu. Jak již víte, můžeme to snadno udělat kliknutím pravým tlačítkem myši na soubor, výběrem Copy z kontextové nabídky a vložte ji do cílového adresáře/složky.
Rád bych však věděl, zda existuje nějaký jiný způsob, jak zkopírovat soubor do více adresářů jedním tahem . Myslel jsem, že to pomůže, když chci zkopírovat jeden soubor do několika různých adresářů najednou. Provedl jsem několik vyhledávání na webu a přišel s následujícími řešeními.
Důležité upozornění:
Upozorňujeme, že následující příkazy nevyžadují žádné potvrzení. Pokud v cílovém adresáři existuje nějaký soubor se stejným názvem, bude automaticky nahrazen.
Pokud s Linuxem začínáte, doporučuji vám otestovat příkazy na jakémkoli testovacím stroji, než je začnete používat v produkci. Tímto způsobem můžete zabránit zbytečné ztrátě dat.
Zkopírujte soubor do více adresářů z příkazového řádku v systému Linux
Mám textový soubor s názvem ostechnix.txt v mém domovském adresáři a chtěl jsem jej zkopírovat do dvou různých adresářů s názvem Downloads a Documents jedním tahem.
Nejprve se podívejme, jak zkopírovat soubor do více různých adresářů pomocí find a cp příkazy.
Metoda 1:Použití příkazů find a cp
Pomocí find můžeme zkopírovat jeden soubor do více adresářů najednou a cp příkazy.
find je příkaz Unix a Linux k vyhledávání souborů v hierarchii adresářů a příkaz cp se používá ke kopírování souborů a adresářů.
Chcete-li zkopírovat soubor s názvem ostechnix.txt do ~/Downloads a ~/Documents adresáře pomocí find a cp příkaz, spusťte:
$ find ~/Downloads/ ~/Documents/ -maxdepth 0 -type d -exec cp ostechnix.txt {} \;
Výše uvedený příkaz zkopíruje soubor ostechnix.txt v aktuálním adresáři do ~/Downloads a ~/Documents adresáře.
Pokud nezadáte '-maxdepth 0' možnost, ostechnix.txt soubor bude zkopírován do ~/Downloads , ~/Documents adresářů a také do jejich podadresářů. Takže to nezapomeňte specifikovat.
Jak jsem již dříve varoval, pokud již existuje nějaký soubor se stejným názvem (tj. ostechnix.txt ) v libovolném cílovém adresáři výše uvedený příkaz jednoduše přepíše existující soubor bez jakéhokoli potvrzení.
Pokud nechcete existující soubor přepsat, můžete použít -n příznak pomocí cp příkaz jako níže:
$ find ~/Downloads/ ~/Documents/ -maxdepth 0 -type d -exec cp -n ostechnix.txt {} \; Nyní nenahradí cílový soubor, pokud již v cílových umístěních existuje.
Metoda 2:Použití příkazů echo, xargs a cp
Dalším způsobem, jak zkopírovat soubory do více umístění, je použití echo , xargs a cp příkazy.
Jak již víte, cp příkaz se používá ke kopírování souborů a adresářů a xargs příkaz se používá k vytváření a spouštění příkazových řádků ze standardního vstupu.
Chcete-li zkopírovat soubor do více adresářů pomocí echo , xargs a cp příkazy, spusťte:
$ echo ~/Downloads ~/Documents | xargs -n 1 cp ostechnix.txt
Pojďme rozebrat výše uvedený příkaz a uvidíme, jak to funguje.
Obecně echo příkaz vypíše daný řetězec nebo text na standardní výstup. Ale v tomto případě zprostředkujeme výstup echo příkaz xargs . Zde echo příkaz odešle cestu k adresáři xargs jako vstup.
xargs příkaz spustí cp příkaz dvakrát a připojí cestu každého adresáře na konec cp příkaz.
xargs příkazy obdrží dva argumenty (tj. cestu k adresáři) z echo příkaz. -n 1 možnost na xargs příkaz říká xargs připojit pouze jeden z těchto argumentů najednou.
Opět platí, že výše uvedený příkaz nahradí cílový soubor, pokud již existuje. Pokud nechcete nahradit cílový soubor, přidejte -n příznak v příkazu:
$ echo ~/Downloads ~/Documents | xargs -n 1 cp -n ostechnix.txt
Metoda 3 – Použití příkazu tee
Tee je nástroj pro Unix a Linux, který se používá ke čtení ze standardního vstupu a zápisu na standardní výstup a soubory.
Nyní zkopírujeme ostechnix.txt do dvou různých adresářů s názvem /home/sk/Downloads a /home/sk/Documents .
Chcete-li tak učinit, stačí spustit následující příkaz z terminálu:
$ tee /home/sk/Downloads/ostechnix.txt /home/sk/Documents/ostechnix.txt < /home/sk/ostechnix.txt
Výše uvedený příkaz zkopíruje ostechnix.txt soubor z domovského adresáře do ~/Downloads a ~/Documents adresář.
Vezměte prosím na vědomí, že tee příkaz také zapíše vstup na standardní výstup. Pokud nechcete tee Chcete-li to provést, přesměrujte standardní výstup na /dev/null jak je uvedeno níže.
$ tee /home/sk/Downloads/ostechnix.txt /home/sk/Documents/ostechnix.txt < /home/sk/ostechnix.txt >/dev/null
Znovu vás varuji. Pokud již existuje nějaký soubor se stejným názvem (např. ostechnix.txt ) v umístěních, výše uvedený příkaz přepíše existující soubor.
Podrobnosti naleznete na stránkách manuálu výše uvedených příkazů:
$ man cp
$ man find
$ man xargs
$ man echo
$ man tee
Závěr
Takto zkopírujeme soubor do více adresářů najednou z příkazové řádky v Linuxu. Mohly by existovat i jiné způsoby, ale věřím, že tyto příkazy jsou velmi jednoduché a snadno použitelné.
Znovu se ujistěte, že jsou cílové cesty správné, a hlavně se ujistěte, že v cílovém umístění neexistuje žádný soubor se stejným názvem.
Související čtení:
- Jak najít a zkopírovat určitý typ souborů z jednoho adresáře do druhého v systému Linux
- Zkopírujte konkrétní typy souborů při zachování struktury adresářů v systému Linux
- Kopírování souborů a vytváření cílových adresářů současně
- Jak kopírovat soubory a měnit vlastnictví a oprávnění současně
- Jak zachovat vlastnictví a oprávnění k souborům při kopírování souborů nebo adresářů
- Obnovit částečně přenesené soubory přes SSH pomocí Rsync
- Jak rychle přenášet velké soubory přes síť v Linuxu a Unixu
- Pokročilé kopírování – přidání ukazatele průběhu do příkazů cp a mv v systému Linux
- Zkopírujte obsah souboru do schránky bez jeho zobrazení