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?
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*'
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