exec 옵션과 find 및 grep 명령의 조합

exec 옵션과 find 및 grep 명령의 조합

이름에 "lib"가 있는 /lib /lib64 폴더의 모든 파일을 찾고 출력에 동일한 이름이 포함되지 않도록 확장자(.so 또는 이와 유사한) 없이 파일 이름을 인쇄하려고 합니다.

내 접근 방식은 다음과 같습니다find /lib /lib64 -name "lib" -exec grep-Ev "*.[a-z]{2}" {} \;

나는 붙어있다. 이것은 작동하지 않습니다. 어떤 제안이라도 대단히 감사하겠습니다!

답변1

find /lib* ! -type d -name \*lib\* | cut -d. -f1 | sort -u

따라서 위 명령은 개행 문자가 포함되지 않은 파일 이름에 대해 작동해야 합니다. 그렇지 않으면 좀 더 명시적인 테스트를 수행해야 합니다. 작성된 대로 이 명령은 다음과 같은 이름을 찾습니다.\*lib\*실제로 글로브어떤 깊이에서도- glob 에 의해 반환된 기본 트리의 모든 하위 디렉터리를 재귀적으로 검색합니다 /lib*/.

find그냥 출력을 인쇄하면 됩니다. 그게 바로 그 일입니다. 그러나 다른 명령을 실행하면 파일 이름이 해당 명령에 대한 인수로 전달되므로 파일이 -exec필요하지 않습니다.grep이름하지만 파일콘텐츠당신의 명령에 따라.

find파이프라인에서 구문 분석하는 출력 은 다음과 같습니다 . cut입력 줄에서 찾은 첫 번째 기간을 인쇄하고 sort해당 결과를 가져와 각 고유 레코드에 중복 항목을 넣습니다 -u.

답변2

find /lib /lib64 -name '*lib*' -type f | sed 's/\(.*\)\..*/\1/' | xargs -n 1 basename | sort -u

lib 디렉토리에서 모든 파일을 찾으십시오. 마지막 기간의 모든 것을 제거하십시오. 디렉토리 이름을 제거하려면 목록을 basename에 전달하십시오. 중복 항목을 정렬하고 제거합니다.

답변3

확장자 없이 파일 이름만 원하는 것 같습니다. 이 문제를 해결하기 위해 튜브를 찾고 있다면 이것은 grep최선의 선택이 아닙니다. 노력하다 sed:

$ find /lib /lib64 -type f -name '*lib*' | sed 's@/.*/@@;s@\..*$@@'

파이프를 통해 중복 항목을 제거할 수 있습니다 sort -u. awkand cut(또는 awk다시 - 둘 중 하나 또는 -가 더 짧고/더 예쁘다, IMHO) 를 사용하면 cut다음이 더 정확해집니다.

$ find /lib /lib64 -type f -name '*lib*' | awk -F '/' '{print $NF}' | cut -d. -f1 | sort -u

반품:

20-libgphoto2-6 40-libsane klibc-P2s_k-gf23VtrGgO2_4pGkQgwMY libBrokenLocale-2 libSegFault libacl libaio libanl-2 libatasmart libattr libaudit libblkid libbsd libbz2 libc-2 libcap libcgmanager libcidn-2 libcom_err libcrypt-2 libcrypto libdbus-1 libdevmapper libdl-2 libe2p libexpat libext2fs libfuse libgcc_s libgcrypt libglib-2 libgpg-error libhistory libjson-c libkeyutils libkmod liblzma liblzo2 libm-2 libmemusage libmount libncurses libncursesw libnewt libnih libnih-dbus libnsl-2 libnss_compat-2 libnss_dns-2 libnss_files-2 libnss_hesiod-2 libnss_nis-2 libnss_nisplus-2 libntfs-3g libpam libpam_misc libpamc libparted libpci libpcprofile libpcre libpcsclite libply libply-boot-client libply-splash-core libply-splash-graphics libpng12 libpopt libprocps libpthread-2 libreadline libresolv-2 librt-2 libselinux libsepol libslang libss libssl libsystemd-daemon libsystemd-login libthread_db-1 libtinfo libudev libulockmgr libusb-0 libusb-1 libutil-2 libuuid libwrap libz

cut그렇지 않으면 모든 확장을 제거하기 위해 파이프가 필요하지 않습니다 .

$ find /lib /lib64 -type f -name '*lib*' | awk -F '/' '{print $NF}' | sort -u

반품:

20-libgphoto2-6.hwdb 40-libsane.rules klibc-P2s_k-gf23VtrGgO2_4pGkQgwMY.so libBrokenLocale-2.19.so libSegFault.so libacl.so.1.1.0 libaio.so.1.0.1 libanl-2.19.so libatasmart.so.4.0.5 libattr.so.1.1.0 libaudit.so.1.0.0 libblkid.so.1.1.0 libbsd.so.0.6.0 libbz2.so.1.0.4 libc-2.19.so libcap.so.2.24 libcgmanager.so.0.0.0 libcidn-2.19.so libcom_err.so.2.1 libcrypt-2.19.so libcrypto.so.1.0.0 libdbus-1.so.3.7.6 libdevmapper.so.1.02.1 libdl-2.19.so libe2p.so.2.3 libexpat.so.1.6.0 libext2fs.so.2.4 libfuse.so.2.9.2 libgcc_s.so.1 libgcrypt.so.11.8.2 libglib-2.0.so.0.4000.0 libgpg-error.so.0.10.0 libhistory.so.6.3 libjson-c.so.2.0.0 libkeyutils.so.1.4 libkmod.so.2.2.5 liblzma.so.5.0.0 liblzo2.so.2.0.0 libm-2.19.so libmemusage.so libmount.so.1.1.0 libncurses.so.5.9 libncursesw.so.5.9 libnewt.so.0.52.15 libnih-dbus.so.1.0.0 libnih.so.1.0.0 libnsl-2.19.so libnss_compat-2.19.so libnss_dns-2.19.so libnss_files-2.19.so libnss_hesiod-2.19.so libnss_nis-2.19.so libnss_nisplus-2.19.so libntfs-3g.so.841.0.0 libpam.so.0.83.1 libpam_misc.so.0.82.0 libpamc.so.0.82.1 libparted.so.0.0.1 libpci.so.3.2.1 libpcprofile.so libpcre.so.3.13.1 libpcsclite.so.1.0.0 libply-boot-client.so.2.1.0 libply-splash-core.so.2.1.0 libply-splash-graphics.so.2.1.0 libply.so.2.1.0 libpng12.so.0.50.0 libpopt.so.0.0.0 libprocps.so.3.0.0 libpthread-2.19.so libreadline.so.6.3 libresolv-2.19.so librt-2.19.so libselinux.so.1 libsepol.so.1 libslang.so.2.2.4 libss.so.2.0 libssl.so.1.0.0 libsystemd-daemon.so.0.0.10 libsystemd-login.so.0.7.1 libthread_db-1.0.so libtinfo.so.5.9 libudev.so.1.3.5 libulockmgr.so.1.0.1 libusb-0.1.so.4.4.4 libusb-1.0.so.0.1.0 libutil-2.19.so libuuid.so.1.3.0 libwrap.so.0.7.6 libz.so.1.2.8

관련 정보