문자열과 일치하는 파일 목록 출력

문자열과 일치하는 파일 목록 출력

디렉터리에서 특정 .deb 파일을 검색하여 해당 디렉터리에서 사용할 수 있는 .deb 파일의 번호가 매겨진 목록을 설치하고 출력하는 스크립트를 작성하려고 합니다.

전임자. "install.deb"가 포함된 모든 파일 이름을 루트 폴더에서 검색하여 목록에 출력합니다. ex. 1. newinstall.deb 2. oldinstall.deb 3. install.deb 등

답변1

find.deb이름이 and awk( mawk또는 gawk적어도 Ubuntu 시스템에서 발견된 구현 )로 끝나는 일반 파일을 찾는 데 사용할 수 있으며 awk번호 지정 및 형식 지정에 사용할 수 있습니다. sort정렬된 목록을 얻기 위해 전화할 수 있습니다 . 파일 경로와 마찬가지로 NUL로 구분된 레코드를 교환 형식으로 사용합니다. 개행 문자는 파일 경로의 모든 문자만큼 유효하므로 , -print0( -zGNU 확장자) 및 다음을 사용하십시오 RS='\0'.

LC_ALL=C find -H "$root_folder" -name '*.deb' -type f -print0 |
  sort -z |
  awk -v RS='\0' '{printf "%3d. %s\n", NR, $0}'

awk대신 which를 사용하여 NUL을 레코드 구분 기호로 지원하지 않는 시스템 perl에 이식 할 수 있습니다.awk

perl -0lne 'printf "%3d. %s\n", $., $_'

숨겨진 항목을 제외하려면 -name '.?*' -prune -o뒤에 삽입하십시오 "$root_folder". zsh 쉘을 사용하는 경우 또 다른 방법은 기본 정렬을 사용하고 숨겨진 파일의 전체를 제외하는 것이며 find파일 이름이 로케일에서 유효한 텍스트가 아닌 경우에는 표시되지 않습니다. 문제:

n=0
for f ( $root_folder/**/*.deb(N.) ) printf '%3d. %s\n' ++n $f

대조적으로, 또는 /... 으로 시작하면 find중단되지 않습니다.$root_folder-!(

관련 정보