디렉터리에서 특정 .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
( -z
GNU 확장자) 및 다음을 사용하십시오 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
-
!
(