Apakah mungkin untuk membuka file dari terminal bukan dengan namanya tetapi dengan posisinya (nomor) di folder? Atau opsi lain?
Karena namanya terlalu panjang.
Tab
tombol?
Apakah mungkin untuk membuka file dari terminal bukan dengan namanya tetapi dengan posisinya (nomor) di folder? Atau opsi lain?
Karena namanya terlalu panjang.
Tab
tombol?
Jawaban:
Anda mungkin belum menemukan Tabpenyelesaian-(lihat di sini ).
Saat mengetikkan nama file di Terminal, ketikkan beberapa huruf pertama dan tekan Tabdan lihat sihir!
*
, jika Anda tidak ingin menggunakan Tab-completion karena alasan tertentu. Atau bahkan *abc*
jika nama file mengandung abc
suatu tempat (coba gunakan subpattern yang unik untuk nama file yang Anda inginkan). Atau cukup salin / tempel nama file menggunakan mouse.
Hanya untuk bersenang-senang, menjawab pertanyaan:
#!/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]])
Konten direktori saat ini terdaftar, diberi nomor. Pilih nomor dan item dibuka:
...gampang:
Logout dan kembali dan mulai menggunakan perintah hanya dengan mengetik
$ o
di terminal
Jika Anda juga ingin menampilkan file tersembunyi, ubah
show_hidden = False
ke:
show_hidden = True
~/bin
belum ada di PATH Anda, Anda harus menambahkannya (misalnya, meletakkan garis seperti export PATH="$PATH:~/bin"
ke .bashrc
atau .profile
.)
source ~/.profile
.
~/bin
sama sekali tidak terintegrasi dengan apa pun. Ubuntu dan Debian dikirimkan dengan custom ~/.profile
yang 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 ~/.profile
tidak akan sama dengan Ubuntu default, jadi itu praktik yang baik untuk selalu waspada yang ~/bin
tidak standar. Bash juga dapat mengabaikan ~/.profile
jika Anda meluncurkan shell dengan --no-profile
opsi
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
open
namun biasanya tidak akan berfungsi (kecuali Anda menggunakan Mac OS); xdg-open
mungkin akan melakukan trik pada kebanyakan sistem GNU / Linux.
Dalam bash murni, menggunakan select
pernyataan:
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
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
$ 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
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 find
utilitas 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-open
akan membuka file dengan aplikasi default dan find
akan berhenti setelahnya. Alasan untuk tambahan -and
dan -quit
untuk mencegah xdg-open
membuka kembali file jika ada tautan keras ke file (yang setara dengan membuka file yang sama dua kali).
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 12
dengan indeks yang Anda coba buka.
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 ls
detailnya.
[PEMBARUAN] ini mengasumsikan bahwa Anda tidak memiliki spasi putih dalam nama file,
terima kasih @wjandrea atas pengamatan Anda.
ls
. Backtick juga sudah tidak digunakan lagi. Gunakan $()
sebagai gantinya.