Jak mogę wyszukać nazwę wieloznaczną we wszystkich podfolderach?

26

Jak mogę wyszukać nazwę wieloznaczną we wszystkich podfolderach? Jaki byłby odpowiednik polecenia DOS: dir *pattern* /sw * nix?

Eduard Florinescu
źródło

Odpowiedzi:

40

Możesz użyć find. Jeśli na przykład chcesz znaleźć wszystkie pliki i katalogi, które zawierały abcdnazwę pliku, możesz uruchomić:

find . -name '*abcd*'
Ryan A.
źródło
12

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, yashalbo tcshmają ***/*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 -ldzostanie uruchomiony bez argumentów, więc wyświetli listę .. W przypadku niektórych xargsimplementacji możesz skorzystać z -ropcji obejścia tego.

Gilles „SO- przestań być zły”
źródło
co robi shopt -s globstar?
capybaralet
@ user2429920 gnu.org/software/bash/manual/… i kliknij gnu.org/software/bash/manual/bash.html#The-Shopt-Builtin, a następnie przewiń w dół do globstar.
Gilles „SO- przestań być zły”