从终端打开文档,但不是按其名称

yh *_*eah 19 command-line files directory

是否可以不通过名称而是通过其在文件夹中的(编号)位置从终端打开文件?或者有其他选择吗?

因为名字太长了。

pom*_*sky 44

您可能还没有发现Tab-completion(请参阅此处)。

在终端中输入文件名时,只需输入前几个字母,然后点击Tab查看魔法!

  • 或者,如果您出于某种原因不想使用 Tab 补全,则只需键入文件名的前几个字母和一个 `*`。或者甚至是 `*abc*`,如果文件名在某处包含 `abc`(尝试使用你想要的文件名唯一的子模式)。或者只是使用鼠标复制/粘贴文件名。 (7认同)
  • @GuntramBlohm 你应该回答这个问题。我认为独立于这个答案与这个答案有很大不同。 (6认同)
  • @guntram 或者您甚至可以将文件拖放到终端。 (4认同)

Jac*_*ijm 32

只是为了好玩,从字面上回答这个问题:

在此处输入图片说明

#!/usr/bin/env python3
import os
import subprocess

show_hidden = False

currfiles = os.listdir("./")
if not show_hidden:
    currfiles = [f for f in currfiles if not f.startswith(".")]
n = 1
for f in currfiles:
    print(str(n) + ". " + f)
    n = n + 1

picked = int(input("Quick, quick, give me a number:\n"))
subprocess.run(["xdg-open", currfiles[picked - 1]])
Run Code Online (Sandbox Code Playgroud)

在实践中如何运作

  1. 在终端的工作目录中,运行“o”(作为命令)
  2. 列出当前目录的内容,并编号。选择号码并打开项目:

    在此处输入图片说明

设置

...简单:

  1. 在您的主目录中创建一个名为“bin”的文件夹(如果尚不存在)
  2. 将脚本复制到一个空文件中,将其保存为(字面意思)“o”(无扩展名),并使其可执行
  3. 注销并重新登录,只需键入即可开始使用该命令

    $ o
    
    Run Code Online (Sandbox Code Playgroud)

    在终端

NB

如果您还想显示隐藏文件,请更改

show_hidden = False
Run Code Online (Sandbox Code Playgroud)

进入:

show_hidden = True
Run Code Online (Sandbox Code Playgroud)


小智 28

Bash 中有一个鲜为人知的功能,它允许您在不调用 python 或任何其他第三方工具的情况下执行此操作,只需一行:

select file in *; do open "$file"; break; done
Run Code Online (Sandbox Code Playgroud)

  • 优秀!但是,`open` 通常不起作用(除非您使用的是 Mac OS);`xdg-open` 可能会在大多数 GNU/Linux 系统上做到这一点。 (8认同)

小智 16

在纯 bash 中,使用以下select语句:

PS3='Quick, quick, give a number: '

select file in *
do 
    xdg-open "$file"
    break
done
Run Code Online (Sandbox Code Playgroud)

设置 PS3 只是眼花缭乱。如果您省略它,您将只会得到默认提示。如果您省略了 break 语句,select 语句将循环直到您按下 CTRL-D 或 CTRL-C。

当然,您也可以将其作为单行运行:

select file in *; do xdg-open "$file"; break; done
Run Code Online (Sandbox Code Playgroud)


sud*_*dus 7

您可以安装和使用mc,午夜指挥官。它是一个带有菜单等的文本用户界面,其灵感来自于旧的 Norton Commander,当人们使用 MSDOS(在 Windows 之前)时很流行。

sudo apt update
sudo apt install mc
Run Code Online (Sandbox Code Playgroud)

并在终端窗口或文本屏幕中启动它,

mc
Run Code Online (Sandbox Code Playgroud)


mea*_*elf 5

$ ls

results.log
string
Templates
textfile
time
time.save
vegetables
vegetablesbsh
Run Code Online (Sandbox Code Playgroud)

怎么样

ls | sed -n 3p

打印第三个文件名

Templates

打开它-

xdg-open "$(ls | sed -n 3p)"

通常有效。

把它放在一个脚本中

results.log
string
Templates
textfile
time
time.save
vegetables
vegetablesbsh
Run Code Online (Sandbox Code Playgroud)

脚本名称:打开

将其保存在主文件夹中。跑:

./open file_number
Run Code Online (Sandbox Code Playgroud)

  • [为什么你不应该解析`ls`的输出](http://mywiki.wooledge.org/ParsingLs) (8认同)