GNU/Linux >> Znalost Linux >  >> Linux

Jak vyloučit konkrétní příponu souboru při rekurzivním kopírování souborů

Jak už možná víte, ‚cp‘ je program příkazového řádku v Linuxu pro kopírování souborů a adresářů. Jednoduché a nejběžnější použití ‚cp‘ je následující:

$ cp file1 file2 file3... fileN target_folder/

Všimněte si, že výše uvedený příkaz funguje pro soubory stejně jako 'empty' složky. Nefunguje pro složky, které mají nějaký obsah, ať už soubory nebo podsložky.

Pro kopírování takových složek můžeme zadat '-r' (rekurzivní) příznak.

$ cp -r folder1/ folder2/ file1 file2 target_folder/

Rekurzivní kopírování znamená, že se zkopíruje celá struktura složek pod složkou, tj. podsložky a soubory v nich, podsložky uvnitř podsložek a soubory v nich atd.

Tím se zkopírují všechny soubory a neexistuje žádná možnost v rámci ‚cp‘ příkaz k vyloučení některých souborů na základě určitých parametrů. Uživatelé mohou například chtít rekurzivně zkopírovat všechny soubory, kromě souborů MP3 (audio) v podsložkách až dolů v hierarchii.

Najít všechny soubory kromě určitých přípon souborů

Abychom toho dosáhli, používáme příkaz find, což je příkazový nástroj jednoduše používaný k vyhledávání souborů a složek v Linuxu na základě parametrů souboru nebo složky:název souboru, přípona, velikost atd.

Podobně existují způsoby, jak vyhledávat soubory zadáním, které soubory mají být vyloučeny v příkazu najít . Syntaxe k vyhledání souborů konkrétní přípony pomocí najít je:

$ find <folder_to_search> -name '*.<extension>'

Chcete-li například rekurzivně vyhledat všechny soubory MP3 v aktuální složce:

$ find . -name "*.mp3"

Chcete-li nyní najít všechny soubory ve složkách a podsložkách, kromě souborů MP3, použijte ‚negaci‘ operátor najít :

$ find . ! -name "*.mp3"

Vidíme, že nyní je zobrazeno vše kromě souborů MP3. Chceme však pouze zobrazit soubory, protože tento výstup bude později vložen do ‘cp’ . Právě teď zobrazuje soubory i složky (např. ‘temp1/’ ), což povede k opakovaným kopiím stejných souborů.

Chcete-li odstranit složky z výstupu, jednoduše použijte argument '-type f' . Zde 'f' znamená soubor.

$ find . ! -name '*.mp3' -type f

Nyní tedy máme pouze soubory získané rekurzivně ve složce ‘test‘ . Nyní můžeme přistoupit k přenosu tohoto výstupu do příkazu ‚cp‘ .

Vyloučit konkrétní příponu souboru při rekurzivním kopírování souborů

K tomu používáme „xargs“ příkaz k vytvoření ‚cp‘ zvažte výstup ‘najít‘ jako jeho argumenty. Také používáme '-t' příznak k určení cílového adresáře, bez kterého program zvažuje výstup ‘najít‘ jako cílový adresář.

$ find <folder_to_search> ! -name '*.<extension>' -type f | xargs cp -t <target_directory>

Aktuální příkaz.

$ find . ! -name '*.mp3' -type f | xargs cp -t Misc/

Tedy všechny soubory nalezené rekurzivně, kromě “.mp3” soubory byly zkopírovány do složky „Misc“ .

Závěr

V tomto článku jsme se naučili, jak rekurzivně kopírovat soubory v Linuxu a zároveň vyloučit soubory s určitou příponou. Podívejte se také na to, jak rekurzivně kopírovat soubory s konkrétní příponou.

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


Linux
  1. Jak vyloučit konkrétní adresáře z kopírování v Linuxu

  2. Jak hledat soubory podle velikosti a přípony?

  3. Jak mohu rekurzivně kopírovat soubory podle přípony souboru a zachovat adresářovou strukturu?

  1. Jak najít soubor v Linuxu ve všech adresářích rekurzivně

  2. Jak používat Inotifywait ke sledování adresáře pro vytváření souborů s konkrétní příponou?

  3. Jak rekurzivně kopírovat soubory podle přípony souboru?

  1. Jak skrýt soubory s konkrétní příponou?

  2. Jak najít všechny soubory s velikostí souboru nula (0) bajtů v adresáři rekurzivně

  3. Jak rekurzivně kopírovat adresáře pomocí rsync při vyloučení konkrétních souborů