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í