GNU/Linux >> Znalost Linux >  >> Linux

Jak zkopírovat velké množství souborů v Linuxu

Používáme příkaz cp v Linuxu ke kopírování souborů a adresářů z jednoho adresáře do druhého. Lze jej jednoduše použít ke zkopírování několika souborů nebo adresářů nebo jej lze použít s '-r' argument (což znamená „rekurzivní ‘), chcete-li zkopírovat adresář a celou adresářovou stromovou strukturu pod ním.

Syntaxe, která se má použít pro příkaz cp je:

$ cp <file1> <file2> ... <fileN> <target_directory>
$ cp -r <directory1> <directory2> ... <directoryN> <target_directory>
$ cp file1 file2 file3 /tmp

Pokud se má zkopírovat velký počet souborů, lze je zadat pomocí zástupných znaků; pokud jsou pojmenovány v sekvenčním vzoru (např. název_souboru_1 , název_souboru_2 , atd.) nebo pokud existuje velký počet souborů stejné přípony (např. .mp4 ).

$ cp *.txt /tmp
$ cp file_* /tmp

příkaz cp může tedy mít libovolný počet argumentů, což jsou buď soubory, adresáře nebo obojí. Posledním argumentem je cílový adresář, do kterého mají být zkopírovány.

Kopírování velkého počtu souborů:Chyba „Seznam argumentů je příliš dlouhý“

Zatímco teoreticky „cp ‘ může mít co nejvíce argumentů, existuje předdefinovaný limit na maximální počet argumentů, se kterými může pracovat jeden příkaz. Toto je limit definovaný v systému Linux a je založen na velikosti zásobníku systému.

Pokud je tedy zadán velmi vysoký počet souborů se zástupným znakem „cp ‘, Např. přes sto tisíc souborů, vyhodí chybu:„Seznam argumentů je příliš dlouhý “.

Například, jak je znázorněno na obrázku níže, složka obsahuje 100002 soubory. Pokud tedy spustíme příkaz copy, zobrazí se výše uvedená chyba a všechny soubory budou se zástupným znakem.

$ ls -l | wc -l
$ cp file_* target/

Řešení:Pomocí příkazu „Najít“ opravte chybu „Příliš dlouhý seznam argumentů“

K vyřešení tohoto problému používáme příkaz najít , který v podstatě vyhledává soubory v adresářích na základě různých parametrů. Spouštíme „najít ‘ ve stejném adresáři jako soubory, které chceme zkopírovat.

Potom použijeme '-exec' parametr „najít ‘ což vám umožní spustit jakýkoli příkaz nad výstupem find.

$ find . -maxdepth 1 -name "<filename_pattern>" -exec cp {} <target_directory> \;

Zde je první argument, '.' (aktuální adresář) je adresář, kde najdete soubory. Argument '-maxdepth 1' bere v úvahu pouze soubory a adresáře v aktuálním adresáři. Bez zadání této hloubky „najít ‘ příkaz bude zbytečně prohledávat všechny podadresáře.

Argument "-name" a řetězec za tím určuje výraz, pomocí kterého lze vypsat požadované soubory. Poté zadáme „cp ‘ příkaz za argumentem '-exec' . Otevřené závorky, '{ }' jsou zástupným symbolem pro argument, který má být použit z výstupu find.

$ find . -maxdepth 1 -name "file_*" -exec cp {} target/ \;

Vidíme, že soubory byly úspěšně zkopírovány do '/target' .

$ cd target/
$ ls | head -10
$ ls -l | wc -l

Podobně, pokud existují adresáře, které mají být zkopírovány spolu se soubory, spustíme ‘cp ‘ s '-r' příznak v příkladu níže.

$ find . -maxdepth 1 -name "file_*" -exec cp -r {} target/ \;

Pamatujte, že v takovém případě by měl být název adresáře možné prohledávat také pomocí „vzoru názvu souboru ‘.

Související čtení :Jak přesunout velké množství souborů v Linuxu

Závěr

V tomto článku jsme viděli, jak zkopírovat velké množství souborů z jednoho adresáře do druhého v Linuxu a jak tedy obejít problém „Seznam argumentů je příliš dlouhý ‘.

Pokud máte nějakou zpětnou vazbu nebo dotazy, dejte nám vědět v komentářích níže!


Linux
  1. Jak zvýšit limit počtu otevřených souborů v Linuxu

  2. Jak přejmenovat soubory v Linuxu

  3. Jak rychle zkopírovat velké množství souborů mezi dvěma servery

  1. Kopírování souborů v Linuxu

  2. Jak používat příkaz Rsync v linuxu?

  3. Jak zkopíruji složku se soubory do jiné složky v Unixu/Linuxu?

  1. Jak najít soubory v Linuxu

  2. Jak kopírovat soubory a adresáře v Linuxu

  3. Jak rozbalit soubory v Linuxu