GNU/Linux >> Znalost Linux >  >> Linux

Nastavení v Bash pro Globbing, pro kontrolu, zda * odpovídá tečkovým souborům?

Nedávno mě překvapilo, když jsem udělal něco jako
mv ./* ../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

Linux
  1. Bash tipy pro každý den na příkazovém řádku

  2. Dvě skvělá použití pro příkaz cp:Bash zkratky

  3. Jak zkontrolovat velké soubory v konzole

  1. Účel klíčového slova „dělat“ v Bash For Loops?

  2. Je možné, aby dokončování Bash procházelo alternativami?

  3. Smažte všechny soubory kromě nejnovějších 3 v bash skriptu

  1. Získejte jednotlivé Man Pages pro Bash Builtin Commands??

  2. Získat všechny soubory kromě souborů v poli – Bash?

  3. Jak fungují oprávnění k souborům pro uživatele root?