GNU/Linux >> Znalost Linux >  >> Linux

Potrubí „najít“ na „ocas“.

Následující by mělo fungovat na absolutně všech cestách.

Deklarujte funkci, aby mohla používat head a tail na výstupu odděleném NUL:

nul_terminated() {
    tr '\0\n' '\n\0' | "[email protected]" | tr '\0\n' '\n\0'
}

Poté jej můžete použít k získání seznamu cest oddělených NUL z vašeho vyhledávání po průchodu tail :

find . -exec printf '%s\0' {} \; | nul_terminated tail -n 2

Poté to můžete pomocí kanálu xargs a přidejte své možnosti:

find . -iname "*FooBar*" -exec printf '%s\0' {} \; | nul_terminated tail -n 2 | xargs -I "{}" -0 cp "{}" "dest"

Vysvětlení:

  1. find soubory v aktuálním adresáři (. ) a níže s názvem obsahujícím foobar (nerozlišují se malá a velká písmena kvůli i v -iname );
  2. pro každý soubor spusťte (-exec ) příkaz k
  3. vytiskněte každou cestu k souboru ({} ) následovaný znakem NUL (\0 ) jednotlivě (\; );
  4. zaměnit nové řádky a znaky NUL (tr '\0\n' '\n\0' );"
  5. získejte poslední dva řádky (tj. cesty; tail -n 2 , "[email protected]" );
  6. znovu prohoďte nové řádky a znaky NUL, abyste získali seznam názvů souborů oddělených NUL (tr '\0\n' '\n\0' ).

xargs příkaz je trochu těžší vysvětlit. Sestaví tolik cp ... "dest" příkazy podle potřeby, aby se vešly do maximální délky příkazu operačního systému, nahrazující {} token v příkazu se skutečným názvem souboru (-I "{}" ... "{}" ), pomocí znaku NUL jako oddělovače při čtení parametrů (-0 ).


Můžete to zkusit

cp $(find . -iname "*FooBar*" | tail -2 ) dest

find . -iname "*FooBar*"|tail -n2|xargs -i cp "{}" dest

Bohužel to nebude fungovat s názvy souborů, které obsahují mezery nebo nové řádky.


Linux
  1. Nechat Tail -f vyjet na prasklé potrubí?

  2. Grep And Tail -f?

  3. Way To ‘tail -f’ A Folder??

  1. Příklady příkazů Linux tail

  2. ocas:příkaz nenalezen

  3. Výstup potrubí k řezání

  1. Existuje nějaký způsob, jak zachovat text předaný na hlavu, konec, méně atd., aby byl vybarven?

  2. Najděte opakovaná slova v textu

  3. gzip - přesměrování nebo potrubí?