输出与字符串匹配的文件列表

输出与字符串匹配的文件列表

我正在尝试编写一个脚本,该脚本将在目录中搜索特定的 .deb 文件以安装并输出该目录中可用 .deb 文件的编号列表。

前任。在根文件夹中搜索包含“install.deb”的所有文件名,并将它们输出到列表 ex 中。 1. newinstall.deb 2. oldinstall.deb 3. install.deb 等。

答案1

find可用于查找名称以.deband结尾的常规文件awkmawkgawk至少是在 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来代替,perl从而使其可移植到awk不支持 NUL 作为记录分隔符的系统:

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

要排除隐藏的,请在-name '.?*' -prune -o后面插入"$root_folder".如果您使用 zsh shell,另一种方法是使用其默认排序并排除隐藏文件的 glob,并且find当文件名在语言环境中不是有效文本时不会出现与 GNU 相同的问题:

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

与 相反,如果以或 为/ ...开头find,它也不会中断。$root_folder-!(

相关内容