Откройте документ от терминала, но не его именем

Действительно ли возможно открыть файл от терминала не его именем, а его (число) положение в папке? Или какая-либо другая опция?

Поскольку имя является слишком длинным.

19
задан 22 March 2019 в 23:55

9 ответов

Вы, вероятно, не обнаружили заполнение клавишей Tab (см. здесь), все же.

В то время как ввод имени файла в Терминале просто вводит первые несколько буквы и поражает Вкладку и видит волшебство!

44
ответ дан 23 November 2019 в 01:55

Только для забавы, буквально отвечая на вопрос:

enter image description here

#!/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]])

Как это работает на практике

  1. В терминале, в рабочем dir, выполненный "o" (как команда)
  2. Содержание текущего каталога перечислено, пронумеровано. Выберите число, и объект открыт:

    enter image description here

Настроить

... легко:

  1. Создайте, если это еще не существует, папка, названная "мусорным ведром" в Вашем корневом каталоге
  2. Скопируйте сценарий в пустой файл, сохраните его как (буквально) "o" (никакое расширение) и сделайте его исполняемым файлом
  3. Выйдите из системы и въезжайте задним ходом и начните использовать команду, просто введя

    $ o
    

    в терминале

N.B.

Если требуется показать скрытые файлы также, изменение

show_hidden = False

в:

show_hidden = True
32
ответ дан 23 November 2019 в 01:55

Существует малоизвестная функция в Bash, который позволяет Вам делать это, не обращаясь к Python или любой другой сторонней программе, и с одной строкой:

select file in *; do open "$file"; break; done
28
ответ дан 23 November 2019 в 01:55

В чистом ударе, с помощью select оператор:

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

select file in *
do 
    xdg-open "$file"
    break
done

Установка PS3 просто eyecandy. При пропуске его Вы просто получите подсказку по умолчанию. При пропуске оператора завершения избранный оператор циклично выполнится, пока Вы не поразите CTRL-D или CTRL-C.

Конечно, можно также выполнить его как остроту:

select file in *; do xdg-open "$file"; break; done
16
ответ дан 23 November 2019 в 01:55

Можно установить и использовать mc, Полуночный Командующий. Это - текстовый пользовательский интерфейс с меню, и т.д. вдохновленными старым Norton Commander, который был популярен, когда люди использовали MS-DOS (перед Windows).

sudo apt update
sudo apt install mc

и запустите его в окне терминала или на текстовом экране,

mc
7
ответ дан 23 November 2019 в 01:55

$ ls

results.log
string
Templates
textfile
time
time.save
vegetables
vegetablesbsh

Как поединок

ls | sed -n 3p

Печатает 3-е имя файла

Templates

Откройте его -

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

Обычно работы.

Поместите его в сценарий

#!/bin/bash

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

Название сценария: открытый

Сохраните его в домашней папке. Выполненный:

./open file_number
5
ответ дан 23 November 2019 в 01:55

В файловых системах Linux имена файлов имеют очень интересное свойство, названное inode: каталог (или папка) является списком inodes и какие имена файлов указывают на те inodes. Так, если Вы знаете inode число, можно попытаться определить местоположение использования файла find утилита и делает определенные операции на нем. Это особенно полезно при контакте с именами файлов в другой локали, специальных символах, или когда Вы случайно создали названный каталог ~.

Например,

$ ls -i1
1103993 crs.py
1103743 foobar.txt
1147196 __pycache__
1103739 'with'$'\n''newline.png'
1103740 yellowstone.jpg

$ find . -type f -inum 1103743 -exec xdg-open {} \; -and -quit

То, что это делает, пересечь текущий рабочий каталог (представленный . ) и ищите запись каталога, которая является файлом с inode номером 1103743. Если файл найден, xdg-open откроет файл с приложением по умолчанию и find выйдет впоследствии. Причина дополнительного -and и -quit должен предотвратить xdg-open повторное открытие файла, если там существуют жесткие ссылки на файл (который эквивалентен открытию того же файла дважды).

3
ответ дан 23 November 2019 в 01:55

Сделайте некоторые файлы:

$ for i in $(seq -w 0 20); do echo "This is file $i." > $i.txt; done
$ ls
00.txt  03.txt  06.txt  09.txt  12.txt  15.txt  18.txt
01.txt  04.txt  07.txt  10.txt  13.txt  16.txt  19.txt
02.txt  05.txt  08.txt  11.txt  14.txt  17.txt  20.txt
$ cat 16.txt 
This is file 16.

Поместите файлы в переменную и откройте файл индексом.

$ files=(*)
$ xdg-open "${files[12]}"
# Opens 12.txt in a text editor, which reads "This is file 12."

Замена 12 с индексом Вы пытаетесь открыться.

1
ответ дан 23 November 2019 в 01:55

Это - вероятно, самый простой ответ, который непосредственно отвечает на вопрос. попробуйте следующее:

touch file-1 file-2 file-3

Скажем, мы хотим открыть (или редактирование) второй файл, мы можем сделать следующее:

echo `ls` | cut -d' ' -f2

это произведет название второго файла, который мы можем использовать в качестве входа к команде, которую мы хотим выполнить, например:

cat $( echo `ls` | cut -d' ' -f2 )

произведет содержание второго файла.

обратите внимание, что можно изменить порядок, в котором файлы печатаются ls, путем тонкой настройки ls аргументов, видят man ls для деталей.

[ОБНОВЛЕНИЕ] это предполагает, что у Вас нет пробелов в именах файлов,
спасибо @wjandrea для Вашего наблюдения.

0
ответ дан 23 November 2019 в 01:55

Другие вопросы по тегам:

Похожие вопросы: