Buka dokumen dari terminal, tetapi tidak dengan namanya

19

Apakah mungkin untuk membuka file dari terminal bukan dengan namanya tetapi dengan posisinya (nomor) di folder? Atau opsi lain?

Karena namanya terlalu panjang.

yh ya
sumber
5
Harap edit dan berikan contoh apa yang ingin Anda lakukan.
hidangan penutup
7
Tidak, bukan tanpa mengkodekannya. Tetapi Anda dapat menggunakan penyelesaian "tab".
Rinzwind
2
Terlalu lama untuk apa?
Carl Witthoft
2
Sudahkah Anda mencoba mengetik dua atau tiga huruf pertama dari nama file dan kemudian menekan Tabtombol?
Henrique

Jawaban:

44

Anda mungkin belum menemukan Tabpenyelesaian-(lihat di sini ).

Saat mengetikkan nama file di Terminal, ketikkan beberapa huruf pertama dan tekan Tabdan lihat sihir!

pomsky
sumber
7
Atau cukup ketikkan beberapa huruf pertama dari nama file, dan a *, jika Anda tidak ingin menggunakan Tab-completion karena alasan tertentu. Atau bahkan *abc*jika nama file mengandung abcsuatu tempat (coba gunakan subpattern yang unik untuk nama file yang Anda inginkan). Atau cukup salin / tempel nama file menggunakan mouse.
Guntram Blohm mendukung Monica
4
@ guntram Atau Anda bahkan dapat menyeret-dan-meletakkan file ke Terminal.
pomsky
6
@GuntramBlohm Anda harus menjawabnya. Saya pikir ini cukup berbeda dari jawaban ini untuk berdiri sendiri.
DQdlM
32

Hanya untuk bersenang-senang, menjawab pertanyaan:

masukkan deskripsi gambar di sini

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

Cara kerjanya dalam praktik

  1. Di terminal, di dir yang berfungsi, jalankan "o" (sebagai perintah)
  2. Konten direktori saat ini terdaftar, diberi nomor. Pilih nomor dan item dibuka:

    masukkan deskripsi gambar di sini

Mempersiapkan

...gampang:

  1. Buat, jika belum ada, folder bernama "bin" di direktori home Anda
  2. Salin skrip ke file kosong, simpan sebagai (harfiah) "o" (tidak ada ekstensi), dan membuatnya dapat dieksekusi
  3. Logout dan kembali dan mulai menggunakan perintah hanya dengan mengetik

    $ o
    

    di terminal

NB

Jika Anda juga ingin menampilkan file tersembunyi, ubah

show_hidden = False

ke:

show_hidden = True
Yakub Vlijm
sumber
1
Jika ~/binbelum ada di PATH Anda, Anda harus menambahkannya (misalnya, meletakkan garis seperti export PATH="$PATH:~/bin"ke .bashrcatau .profile.)
Nick Matteo
Lihat jawaban b0fh - ini sepertinya built-in dari bash
mgarciaisaia
1
@kundor nggak, bukan di Ubuntu. Logout dan masuk melakukan pekerjaan, atau hanya source ~/.profile.
Jacob Vlijm
@JacobVlijm ~/binsama sekali tidak terintegrasi dengan apa pun. Ubuntu dan Debian dikirimkan dengan custom ~/.profileyang memiliki garis if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" ; fi. Pada Mac OS X dan CentOS Anda harus mengonfigurasinya sendiri. Peluang yang baik adalah bahwa jika Ubuntu diberikan kepada seseorang oleh departemen TI, kemungkinannya adalah ~/.profiletidak akan sama dengan Ubuntu default, jadi itu praktik yang baik untuk selalu waspada yang ~/bintidak standar. Bash juga dapat mengabaikan ~/.profilejika Anda meluncurkan shell dengan --no-profileopsi
Sergiy Kolodyazhnyy
@mgarciaisaia Komentar asli dimaksudkan untuk Anda, sebenarnya ^
Sergiy Kolodyazhnyy
28

Ada fitur yang kurang dikenal di Bash yang memungkinkan Anda melakukan ini tanpa memanggil python atau alat pihak ketiga lainnya, dan dengan satu baris:

select file in *; do open "$file"; break; done
b0fh
sumber
8
Luar biasa! opennamun biasanya tidak akan berfungsi (kecuali Anda menggunakan Mac OS); xdg-openmungkin akan melakukan trik pada kebanyakan sistem GNU / Linux.
Nick Matteo
1
Tapi bash bukan satu-satunya shell yang ada, kau tahu :-)
jamesqf
16

Dalam bash murni, menggunakan selectpernyataan:

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

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

Pengaturan PS3 hanya eyecandy. Jika Anda membiarkannya, Anda hanya akan mendapatkan prompt default. Jika Anda meninggalkan pernyataan break, pernyataan pilih akan berulang sampai Anda menekan CTRL-D atau CTRL-C.

Tentu saja Anda juga dapat menjalankannya sebagai satu-baris:

select file in *; do xdg-open "$file"; break; done
Oscar
sumber
Solusi yang cukup sederhana dan berfungsi cukup baik. Anda dapat melangkah lebih jauh dan membuat alias atau fungsi darinya
Sergiy Kolodyazhnyy
7

Anda dapat menginstal dan menggunakan mc, Komandan Tengah Malam. Ini adalah antarmuka pengguna teks dengan menu dll yang terinspirasi oleh Norton Commander lama, yang populer ketika orang menggunakan MSDOS (sebelum Windows).

sudo apt update
sudo apt install mc

dan memulainya di jendela terminal atau di layar teks,

mc
sudodus
sumber
5

$ ls

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

Bagaimana jika

ls | sed -n 3p

Mencetak nama file ke-3

Templates

Buka-

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

Biasanya berhasil.

Masukkan ke dalam naskah

#!/bin/bash

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

Nama skrip: terbuka

Simpan di folder rumah. Menjalankan:

./open file_number
SendSelf
sumber
3

Pada sistem file Linux, nama file memiliki properti yang sangat menarik yang disebut inode : direktori (atau folder) adalah daftar inode dan yang menunjuk nama file ke inode tersebut. Jadi, jika Anda tahu nomor inode, Anda dapat mencoba mencari file menggunakan findutilitas dan melakukan operasi tertentu di atasnya. Ini sangat berguna ketika berhadapan dengan nama file di lokal yang berbeda, karakter khusus , atau ketika Anda secara tidak sengaja membuat direktori bernama~ .

Sebagai contoh,

$ 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

Apa yang dilakukan adalah melintasi direktori kerja saat ini (diwakili oleh .) dan mencari entri direktori yang merupakan file dengan nomor inode 1103743. Jika file ditemukan, xdg-openakan membuka file dengan aplikasi default dan findakan berhenti setelahnya. Alasan untuk tambahan -anddan -quituntuk mencegah xdg-openmembuka kembali file jika ada tautan keras ke file (yang setara dengan membuka file yang sama dua kali).

Sergiy Kolodyazhnyy
sumber
1

Buat beberapa file:

$ 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.

Masukkan file ke dalam variabel dan buka file dengan indeks.

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

Ganti 12dengan indeks yang Anda coba buka.

pengguna1717828
sumber
Saya lebih suka {00..20} daripada $ (seq -w 0 20) karena hanya satu proses eksternal yang kurang berkembang. Saya tidak yakin tentang portabilitas. Mungkin bash-isme .. ;-)
Oscar
0

Ini mungkin jawaban paling sederhana yang langsung menjawab pertanyaan. coba yang berikut ini:

touch file-1 file-2 file-3

Katakanlah kita ingin membuka (atau mengedit) file kedua, kita dapat melakukan hal berikut:

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

ini akan menampilkan nama file kedua, yang dapat kita gunakan sebagai input ke perintah yang ingin kita lakukan, misalnya:

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

akan menampilkan konten file kedua.

perhatikan bahwa Anda dapat mengubah urutan file dicetak oleh ls, dengan mengubah argumen ls, lihat man lsdetailnya.

[PEMBARUAN] ini mengasumsikan bahwa Anda tidak memiliki spasi putih dalam nama file,
terima kasih @wjandrea atas pengamatan Anda.


sumber
2
Ini akan gagal untuk nama file yang mengandung spasi. Jawaban ini menyiasatinya, tetapi masih merupakan ide yang buruk untuk menguraikan ls. Backtick juga sudah tidak digunakan lagi. Gunakan $()sebagai gantinya.
wjandrea