我有一个文件目录。每个文件中都有一行内容:
# 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
使用单一 GNUawk
过程:
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、符号链接...))。