Я хочу искать файлы в текущем каталоге, начиная с "lib". Я хочу устранить подкаталоги.

Я пытаюсь выполнить следующую команду, но она не дает никаких файлов. Что-то не так в следующей команде?

find -maxdepth 1 -name "lib*.*" -type "f"

2 ответа2

2

Как упоминалось в комментарии, в Unix *.* Означает, что имя файла должно содержать точку.  Если имена ваших файлов не содержат точек, используйте -name "lib*" ; например,

find . -maxdepth 1 -type f -name "lib*" -printf '%f\n'
1

Ваш пример работает для меня, пока я на самом деле в каталоге:

$ cd /lib
$ find -maxdepth 1 -name "lib*.*" -type "f"
./libthread_db-1.0.so
./libfreebl3.so
./libnsl-2.12.so
./libnss_compat-2.12.so
./libcidn-2.12.so
./libdl-2.12.so
./libnss_hesiod-2.12.so
./libresolv-2.12.so
./libz.so.1.2.3
./libm-2.12.so
./libanl-2.12.so
./libpthread-2.12.so
./libutil-2.12.so
./libnss_dns-2.12.so
./libnss_files-2.12.so
./libcrypt-2.12.so
./libBrokenLocale-2.12.so
./libfreebl3.chk
./libnss_nisplus-2.12.so
./libSegFault.so
./libc-2.12.so
./librt-2.12.so
./libnss_nis-2.12.so

Я предполагаю, что вы дали команду из другого каталога. В любом случае более обычно указать каталог, который вы хотите использовать в качестве отправной точки, например:

find /lib -maxdepth 1 -name "lib*.*" -type "f"

Также, как другие отметили в комментариях, *.* Означает, что имя файла должно содержать «.» (как это происходит, если поиск в каталоге, содержащем библиотеки, скорее всего, они все будут содержать точку).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .