Pokud například hledáte skryté soubory a složky na úrovni A a nechcete
A/b/.hidden
ke zkopírování byste měli být schopni použít toto:
cp -r A/.[^.]* B
V podstatě to znamená zkopírovat cokoliv, co začíná . a poté jakýkoli znak jiný než . Tím se odfiltruje . a ..
Edit:Odstraněno -p z příkazu cp, protože Asker neuvedl, že chce zachovat nějaká vlastnictví, data atd.
Problém s A/.* je, že existuje adresář . v A který také odpovídá vzoru.
Můžete zapnout rozšířené vzory globusů a použít následující:
shopt -s extglob
cp -r A/.!(?(.)) B
Vyhovuje soubory, jejichž název začíná tečkou a jejichž druhý znak není ani tečka, ani nic ( ?(.) neodpovídá ničemu nebo tečce, !(...) to neguje, tj. !(?(.)) odpovídá všemu ostatnímu než nic nebo tečka).
Pro takové případy doporučujeme použít find místo cp takhle:
find A/ -type f -maxdepth 1 -name '.*' -exec cp -p {} B/ \;
Základní syntaxe se rozpadá takto:
find A/ -type f:findpoložky v adresářiA/jehož typem je soubor (místo adresáře)…-maxdepth 1 -name '.*':K tomu promaxdepthz 1 adresářů a jejichžnamezačíná..-exec cp -p {} B/ \;:A jakmile jsou tyto soubory nalezeny,execcppříkaz s-ppříznak pro zachování dat/časů ze zdroje ({}) do cíleB/.
Rád používám maxdepth přidat vrstvu kontroly, abych náhodou nekopíroval celý souborový systém. Ale klidně to odstraňte.