显示文件名菜单并让用户通过输入数字来选择文件

显示文件名菜单并让用户通过输入数字来选择文件

我创建了一个脚本,允许用户通过复制和粘贴该文件来选择该文件。然后对该文件执行 grep。我想知道是否可以在目录中的每个文件前面放置一个数字,以便用户只需键入一个数字。

我尝试过的:

  • ls -l然后让 ls | wc -l用户选择相应的文件编号,但运气不好。
  • 接下来,ls -i尝试使用该文件的节点号执行 grep,但没有成功。

答案1

在 中bashkshzsh可以使用select关键字:

select file in *; do
  grep 'something' "$file"
done

select要在显示列表时给出使用说明,请设置$PS3 运行select,例如:

PS3='number of file to grep in, ^C to exit: '

答案2

要将行号放在 ls 前面,最简单的方法可能是

 ls -1 | cat -n

然后选择文件号N,你可以尝试

ls -1 | sed -n Np

答案3

顺便说一句,您可以使用 inode 编号并仅使用以下命令ls

ls -i

将输出类似:

 $ ls -i
13107210 file
13238318 dir
13109301 script.sh

不过与 相比,这个数字还是相当大的cat -n。但这种方式的主要优点是你总是会找到确切的文件,而使用cat -n+sed如果在两个命令之间在你的目录中创建了一些新文件,你可以采取另一个。

答案4

还可以看看 percol、fzy、smenu 和朋友。他们很乐意从标准输入中获取,提供一个带有交互式过滤器的用户友好的选择菜单,然后再次通过管道输出选定的行。

相关内容