Czy można otworzyć plik z terminala nie po nazwie, ale po jego (numerowej) pozycji w folderze? Lub jakaś inna opcja?
Ponieważ nazwa jest za długa.
Tab
klawisz?
Czy można otworzyć plik z terminala nie po nazwie, ale po jego (numerowej) pozycji w folderze? Lub jakaś inna opcja?
Ponieważ nazwa jest za długa.
Tab
klawisz?
Odpowiedzi:
Prawdopodobnie jeszcze nie Tabodkryłeś -completion (patrz tutaj ).
Podczas wpisywania nazwy pliku w Terminalu wystarczy wpisać kilka pierwszych liter i nacisnąć Tabi zobaczyć magię!
*
, jeśli z jakiegoś powodu nie chcesz używać uzupełniania tabulatorami. Lub nawet *abc*
jeśli nazwa pliku abc
gdzieś zawiera (spróbuj użyć wzorca unikalnego dla żądanej nazwy pliku). Lub po prostu skopiuj / wklej nazwę pliku za pomocą myszy.
Dla zabawy, dosłownie odpowiadając na pytanie:
#!/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]])
Zawartość bieżącego katalogu jest wymieniona, ponumerowana. Wybierz numer, a przedmiot zostanie otwarty:
...jest proste:
Wyloguj się, zaloguj ponownie i zacznij korzystać z polecenia, pisząc
$ o
w terminalu
Jeśli chcesz również pokazać ukryte pliki, zmień
show_hidden = False
w:
show_hidden = True
~/bin
nie ma go jeszcze w ŚCIEŻCE, musisz go dodać (na przykład wstawić wiersz podobny export PATH="$PATH:~/bin"
do .bashrc
lub .profile
.)
source ~/.profile
.
~/bin
w ogóle nie jest wbudowany w nic. Ubuntu i Debian są dostarczane z niestandardowymi ~/.profile
liniami if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" ; fi
. W Mac OS X i CentOS musisz to skonfigurować samodzielnie. Dobrą szansą jest to, że jeśli Ubuntu jest dostarczany osobie przez dział IT, są szanse, że ~/.profile
nie będzie taki sam jak domyślny Ubuntu, więc dobrą praktyką jest zawsze uważać, co ~/bin
nie jest standardowe. Bash może również zignorować, ~/.profile
jeśli uruchomisz powłokę z --no-profile
opcją
W Bash istnieje mało znana funkcja, która pozwala to zrobić bez wywoływania Pythona lub innego narzędzia innej firmy i za pomocą jednej linii:
select file in *; do open "$file"; break; done
open
zazwyczaj jednak nie działa (chyba że masz system Mac OS); xdg-open
prawdopodobnie zrobi to samo na większości systemów GNU / Linux.
W czystym bashu, używając select
instrukcji:
PS3='Quick, quick, give a number: '
select file in *
do
xdg-open "$file"
break
done
Ustawienie PS3 jest po prostu efektowne. Jeśli go pominiesz, zobaczysz tylko domyślny monit. Jeśli pominiesz instrukcję break, instrukcja select będzie się zapętlać, dopóki nie naciśniesz CTRL-D lub CTRL-C.
Oczywiście możesz również uruchomić go jako jeden wiersz:
select file in *; do xdg-open "$file"; break; done
Możesz zainstalować i używać mc
Midnight Commander. Jest to tekstowy interfejs użytkownika z menu itp. Zainspirowany starym programem Norton Commander, który był popularny, gdy ludzie korzystali z MSDOS (przed Windows).
sudo apt update
sudo apt install mc
i uruchom go w oknie terminala lub na ekranie tekstowym,
mc
$ ls
results.log
string
Templates
textfile
time
time.save
vegetables
vegetablesbsh
Może
ls | sed -n 3p
Wyświetla trzecią nazwę pliku
Templates
Otwórz to-
xdg-open "$(ls | sed -n 3p)"
Zwykle działa.
Umieść to w skrypcie
#!/bin/bash
xdg-open "$(ls | sed -n "$1"p)"
Nazwa skryptu: otwarty
Zapisz go w folderze domowym. Biegać:
./open file_number
W systemach plików Linux nazwy plików mają bardzo interesującą właściwość o nazwie i- węzeł : katalog (lub folder) to lista i-węzłów i które nazwy plików wskazują na te i-węzły. Tak więc, jeśli znasz numer i-węzła, możesz spróbować zlokalizować plik za pomocą find
narzędzia i wykonać na nim określone operacje. Jest to szczególnie przydatne, gdy mamy do czynienia z nazwami plików w różnych lokalizacjach, znakach specjalnych lub gdy przypadkowo utworzono katalog o nazwie~
.
Na przykład,
$ 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
Przechodzi przez bieżący katalog roboczy (reprezentowany przez .
) i szuka wpisu katalogu, który jest plikiem o numerze i-węzła 1103743. Jeśli plik zostanie znaleziony, xdg-open
otworzy plik z domyślną aplikacją i find
wyjdzie później. Powodem Extra -and
i -quit
jest zapobieganie xdg-open
ponownym otwarciu pliku, jeśli istnieją dowiązania do pliku (co jest równoznaczne z otwarciem tego samego pliku dwa razy).
Zrób kilka plików:
$ 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.
Umieść pliki w zmiennej i otwórz plik według indeksu.
$ files=(*)
$ xdg-open "${files[12]}"
# Opens 12.txt in a text editor, which reads "This is file 12."
Zamień 12
na indeks, który próbujesz otworzyć.
Jest to prawdopodobnie najprostsza odpowiedź, która bezpośrednio odpowiada na pytanie. spróbuj wykonać następujące czynności:
touch file-1 file-2 file-3
Powiedzmy, że chcemy otworzyć (lub edytować) drugi plik, możemy wykonać następujące czynności:
echo `ls` | cut -d' ' -f2
spowoduje to wyświetlenie nazwy drugiego pliku, którego możemy użyć jako danych wejściowych do polecenia, które chcemy wykonać, na przykład:
cat $( echo `ls` | cut -d' ' -f2 )
wyświetli zawartość drugiego pliku.
Zauważ, że możesz zmienić kolejność, w jakiej pliki są drukowane przez ls, poprawiając argumenty ls, zobacz
man ls
szczegóły.
[AKTUALIZACJA] zakłada to, że nie masz białych znaków w nazwach plików,
dziękuję @wjandrea za twoją obserwację.
ls
. Również backticks są przestarzałe. Użyj $()
zamiast tego.