Действительно ли возможно открыть файл от терминала не его именем, а его (число) положение в папке? Или какая-либо другая опция?
Поскольку имя является слишком длинным.
Вы, вероятно, не обнаружили заполнение клавишей Tab (см. здесь), все же.
В то время как ввод имени файла в Терминале просто вводит первые несколько буквы и поражает Вкладку и видит волшебство!
Только для забавы, буквально отвечая на вопрос:
#!/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]])
Содержание текущего каталога перечислено, пронумеровано. Выберите число, и объект открыт:
... легко:
Выйдите из системы и въезжайте задним ходом и начните использовать команду, просто введя
$ o
в терминале
Если требуется показать скрытые файлы также, изменение
show_hidden = False
в:
show_hidden = True
Существует малоизвестная функция в Bash, который позволяет Вам делать это, не обращаясь к Python или любой другой сторонней программе, и с одной строкой:
select file in *; do open "$file"; break; done
В чистом ударе, с помощью 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
Можно установить и использовать mc
, Полуночный Командующий. Это - текстовый пользовательский интерфейс с меню, и т.д. вдохновленными старым Norton Commander, который был популярен, когда люди использовали MS-DOS (перед Windows).
sudo apt update
sudo apt install mc
и запустите его в окне терминала или на текстовом экране,
mc
$ 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
В файловых системах 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
повторное открытие файла, если там существуют жесткие ссылки на файл (который эквивалентен открытию того же файла дважды).
Сделайте некоторые файлы:
$ 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
с индексом Вы пытаетесь открыться.
Это - вероятно, самый простой ответ, который непосредственно отвечает на вопрос. попробуйте следующее:
touch file-1 file-2 file-3
Скажем, мы хотим открыть (или редактирование) второй файл, мы можем сделать следующее:
echo `ls` | cut -d' ' -f2
это произведет название второго файла, который мы можем использовать в качестве входа к команде, которую мы хотим выполнить, например:
cat $( echo `ls` | cut -d' ' -f2 )
произведет содержание второго файла.
обратите внимание, что можно изменить порядок, в котором файлы печатаются ls, путем тонкой настройки ls аргументов, видят
man ls
для деталей.
[ОБНОВЛЕНИЕ] это предполагает, что у Вас нет пробелов в именах файлов,
спасибо @wjandrea для Вашего наблюдения.