Nedávno mě překvapilo, když jsem udělal něco jakomv ./* ../somedirectory
a zjistili, že soubory jako .gitignore
nebyly přesunuty.
Většinu své práce dělám v zsh na OS X a toto překvapení mě zasáhlo v bash na CentOS. Zkoušel jsem bash na OS X a zjistil jsem stejné chování:*
neodpovídá tečkovým souborům. To se mi zdá velmi nežádoucí, ale zjevně je to výchozí bash. (Možná je to také výchozí zsh, pokud si pamatuji, ale možná jsem to před lety změnil ve svém .zshrc a zapomněl, že to kdy fungovalo jinak.)
Jak mohu nakonfigurovat bash, aby se choval tak, jak jsem očekával:aby * odpovídal všem souborům a neignoroval soubory s tečkami.
V případě, že to není vůbec jasné, zde je návod, jak to reprodukovat
cd /tmp
mkdir {t,d}est
touch test/{.,}{1,2,3,4,5,6,7}
ls -hal test
mv test/* dest
ls -hal test # notice dot files are still there
ls -hal dest # notice only some files were mv'ed
Přijatá odpověď:
Bash
Jak jste si již všimli, bash nebude odpovídat .
na začátku jména nebo lomítka. Chcete-li změnit shodu týkající se tečky, musíte nastavit dotglob
možnost – man bash:
dotglob If set, bash includes filenames beginning with a `.' in the results of pathname expansion.
Pro aktivaci/nastavení pomocí bash použijte shopt
, např.:
shopt -s dotglob
Pro zsh můžete také použít dotglob
možnost, ale budete muset použít setopt
chcete-li jej povolit, např.:
setopt dotglob