Jak mogę wyszukać nazwę wieloznaczną we wszystkich podfolderach? Jaki byłby odpowiednik polecenia DOS: dir *pattern* /s
w * nix?
26
Możesz użyć find
. Jeśli na przykład chcesz znaleźć wszystkie pliki i katalogi, które zawierały abcd
nazwę pliku, możesz uruchomić:
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*
(uwaga niektóre z tych muszli będzie śledzić dowiązania podczas zejścia z drzewa katalogów, a niektóre z tych, które nie lubią zsh
, yash
albo tcsh
mają ***/*abcd*
to zrobić).
Przenośny (z wyjątkiem bardzo starych systemów; OpenBSD zajęło dużo czasu, ale w końcu obsługuje exec … +
od 5.1):
find . -name '*abcd*' -exec ls -ld {} +
Nie POSIX, ale działa na * BSD, Linux, Cygwin, BusyBox:
find . -name '*abcd*' -print0 | xargs -0 ls -ld
Zauważ, że z wyjątkiem niektórych BSD, jeśli nie zostanie znaleziony pasujący plik, ls -ld
zostanie uruchomiony bez argumentów, więc wyświetli listę .
. W przypadku niektórych xargs
implementacji możesz skorzystać z -r
opcji obejścia tego.
globstar
.