특정 내용 줄에 따라 정렬된 파일 목록

특정 내용 줄에 따라 정렬된 파일 목록

파일 디렉토리가 있습니다. 각 파일에는 다음과 같은 줄이 있습니다.

# order: N

여기서 N은 정수입니다. 해당 N 번호에 따라 디렉터리의 모든 파일을 나열하거나 래퍼 스크립트에 포함하고 싶습니다. bash 명령줄에서 이것이 가능합니까?

답변1

GNU를 사용 grep하고 파일 이름에 콜론이나 개행 문자가 포함되어 있지 않다고 가정합니다.

$ ls
bar     baz     foo     freeble quux
$ cat ./*
# order: 3
# order: 2
# order: 1
# order: 4
# order: 5
$ grep -m1 -EH '^# order: [0-9]+$' ./* | sort -n -k3 | cut -d: -f1
foo
baz
bar
freeble
quux

답변2

단일 GNU 사용awk프로세스:

awk 'BEGIN{ PROCINFO["sorted_in"]="@val_num_asc" }
     /order: [0-9]+/{ a[FILENAME]=$NF; nextfile }
     END{ for(i in a) print i }' ./*

답변3

를 사용하면 zsh다음을 사용하여 해당 줄의 내용을 기반으로 글로벌 정렬 순서를 정의할 수 있습니다.

byOrder() REPLY=$(grep '^# order:' < $REPLY)

예를 들어 다음과 같이 사용하십시오.

printf '%s\n' *(.no+byOrder)

또는

sorted_file_list=(*(.no+byOrder))

(또한 .glob 한정자에 a를 추가하여정기적인파일(디렉토리, fifo, 심볼릭 링크가 아님...)).

관련 정보