파이프를 사용하여 출력에서 ​​파일 경로(디렉토리 경로 제외)만 필터링 |

파이프를 사용하여 출력에서 ​​파일 경로(디렉토리 경로 제외)만 필터링 |

rpm -qpl dhad-9.0.27891-2.x86_64.rpm이 패키지의 모든 파일 경로와 디렉토리 경로를 표시할 수 있습니다.

출력 예 :

/opt/dhad/tv_bin/wine/lib/wine/winmm.dll.so
/opt/dhad/tv_bin/wine/lib/wine/winspool.drv.so
/opt/dhad/tv_bin/wine/lib/wine/winsta.dll.so
/opt/dhad/tv_bin/wine/lib/wine/wintrust.dll.so
/opt/dhad/tv_bin/wine/lib/wine/ws2_32.dll.so
/opt/dhad/tv_bin/wine/lib/wine/wtsapi32.dll.so
/opt/dhad/tv_bin/wine/share
/opt/dhad/tv_bin/wine/share/wine
/opt/dhad/tv_bin/wine/share/wine/fonts
/opt/dhad/tv_bin/wine/share/wine/fonts/coue1255.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/coue1256.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/coue1257.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/coure.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/couree.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/coureg.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/courer.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/couret.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/cvgasys.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/hvgasys.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/jsmalle.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/jvgasys.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/marlett.ttf
/opt/dhad/tv_bin/wine/share/wine/fonts/smae1255.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/smae1256.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/smae1257.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/smalle.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/smallee.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/smalleg.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/smaller.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/smallet.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/ssee1255.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/ssee1256.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/ssee1257.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/ssee874.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/ssef1255.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/ssef1256.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/ssef1257.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/ssef874.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/sserife.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/sserifee.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/sserifeg.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/sserifer.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/sserifet.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/sseriff.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/sseriffe.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/sseriffg.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/sseriffr.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/sserifft.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/svgasys.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/symbol.ttf
/opt/dhad/tv_bin/wine/share/wine/fonts/tahoma.ttf
/opt/dhad/tv_bin/wine/share/wine/fonts/tahomabd.ttf
/opt/dhad/tv_bin/wine/share/wine/fonts/vgas1255.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/vgas1256.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/vgas1257.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/vgas874.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/vgasys.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/vgasyse.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/vgasysg.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/vgasysr.fon
/opt/dhad/tv_bin/wine/share/wine/fonts/vgasyst.fon
/opt/dhad/tv_bin/wine/share/wine/generic.ppd
/opt/dhad/tv_bin/wine/share/wine/l_intl.nls
/opt/dhad/tv_bin/wine/share/wine/wine.inf
/opt/dhad/tv_bin/xdg-utils
/opt/dhad/tv_bin/xdg-utils/LICENSE
/opt/dhad/tv_bin/xdg-utils/README
/opt/dhad/tv_bin/xdg-utils/xdg-desktop-icon
/opt/dhad/tv_bin/xdg-utils/xdg-desktop-menu
/opt/dhad/tv_bin/xdg-utils/xdg-email
/opt/dhad/tv_bin/xdg-utils/xdg-icon-resource
/opt/dhad/tv_bin/xdg-utils/xdg-mime
/opt/dhad/tv_bin/xdg-utils/xdg-open
/opt/dhad/tv_bin/xdg-utils/xdg-screensaver
/opt/dhad/tv_bin/xdg-utils/xdg-settings
/usr
/usr/bin
/usr/bin/viewer
/var
/var/log
/var/log/viewer

나는하고 싶다파일 경로만 필터링:

나는 시도한다:

rpm -qpl dhad-9.0.27891-2.x86_64.rpm | find -type f

또한 :

rpm -qpl dhad-9.0.27891-2.x86_64.rpm|grep -f

또한 :

rpm -qpl dhad-9.0.27891-2.x86_64.rpm |ls -f

모두 작동하지 않았습니다.

답변1

정말 끔찍했어요. 출력이 다음과 같이 정렬되어 있으면 거꾸로 볼 수 있습니다.

  1. 마지막 줄을 타세요
  2. 마지막 것부터 잘라서 /보관하고 다음 줄로 넘어갑니다.
  3. 만약 라인그렇지 않다마지막 디렉토리 이름과 같으면 인쇄하십시오.
  4. 출력을 높이고 2단계로 돌아갑니다.

순서를 유지하려면 출력을 다시 뒤집어야 합니다. 고맙게도 이것을 간단하게 만들어주는 tac( 의 반대 ) 라는 작은 명령이 있습니다 . catBash 스크립팅 전후에 이를 호출합니다.

... | tac | while read p; do [ "$l" != "$p" ] && echo "$p"; l="$(dirname "$p")"; done | tac

이는 파일 순서를 신뢰할 수 있는 경우에만 작동합니다. 아마 그럴 수 있을 것 같아요. 나는 이렇게 정렬된 패키지 파일을 본 적이 있기 때문에 이것이 표준이라고 가정합니다.


이에 답하려고 할 때 awk. awk요즘에는 대부분의 답변을 -form으로 제공하는 것 같으니 awk에서 볼 수 있는 위의 내용은 다음과 같습니다.

... | tac | awk 'l!=$0{print}{sub(/\/[^\/]*$/,"",$1);l=$0}' | tac

조금 더 짧지만 더 빠른지는 의심스럽습니다.

답변2

README와 LICENSE가 파일인 것 같습니다. 그래서 시도해 볼 수 있습니다.

rpm -qpl dhad-9.0.27891-2.x86_64.rpm | grep -P '.*\..*|README|LICENSE'

답변3

당신은해야 할 것시험내 생각에 각 파일 경로는 다음과 같습니다.

some command \
| xargs -I{} sh -c 'test -f "$0" && printf "%s\n" "$0"' {}

또는

while read -r f; do 
  [[ -f "$f" ]] && printf "%s\n" "$f"
done < <(some command)

관련 정보