it-swarm-eu.dev

Jak mohu prohledat název divoké karty ve všech podsložkách?

Jak mohu prohledat název divoké karty ve všech podsložkách? Jaký by byl ekvivalent příkazu DOS: dir *pattern* /s in * nix?

29

Můžete použít find. Pokud jste například chtěli najít všechny soubory a adresáře, které mají v názvu souboru abcd, můžete spustit:

find . -name '*abcd*'
43
Ryan A.

Zsh:

ls -ld -- **/*abcd*

Ksh93:

set -o globstar     # put this line in your ~/.kshrc
ls -ld -- **/*abcd*

Bash ≥4:

shopt -s globstar   # put this line in your ~/.bashrc
ls -ld -- **/*abcd*

Yash:

set -o extendedglob # put this line in your ~/.yashrc
ls -ld -- **/*abcd*

tcsh:

set globstar
ls -ld -- **/*abcd*

ryba:

ls -ld -- **abcd*

(pozor, některé z těchto skořápek budou následovat symlinks, když sestupují ze stromu adresářů; některé z těch, které nemají rádi zsh, yash nebo tcsh mají ***/*abcd*) udělat to).

Přenosný (s výjimkou velmi starých systémů; OpenBSD trvalo dlouho, ale konečně podporuje exec … + Od 5.1):

find . -name '*abcd*' -exec ls -ld {} +

Ne POSIX, ale funguje na * BSD, Linux, Cygwin, BusyBox:

find . -name '*abcd*' -print0 | xargs -0 ls -ld

Všimněte si, že s výjimkou některých BSD, pokud není nalezen žádný odpovídající soubor, bude ls -ld Spuštěn bez argumentů, tak bude uveden seznam .. U některých implementací xargs můžete problém vyřešit pomocí možnosti -r.

V ostatních odpovědích není uvedeno

ls -R1 | grep pattern

použité argumenty:

-R, --recursive
       list subdirectories recursively
-1     list one file per line
0