Terminalden bir dosyayı adıyla değil klasördeki (sayı) konumu ile açmak mümkün müdür? Veya başka bir seçenek?
Çünkü isim çok uzun.
Tab
tuşuna basmayı denediniz mi?
Terminalden bir dosyayı adıyla değil klasördeki (sayı) konumu ile açmak mümkün müdür? Veya başka bir seçenek?
Çünkü isim çok uzun.
Tab
tuşuna basmayı denediniz mi?
Yanıtlar:
Muhtemelen henüz- Tabtamamlama ( burada bakınız ) keşfetmediniz .
Terminal'e bir dosya adı yazarken sadece ilk birkaç harfi yazın ve Tabbüyüyü görün ve görün!
*
, herhangi bir nedenle Sekme-tamamlamayı kullanmak istemiyorsanız. Veya *abc*
dosya adı bir abc
yerde olsa bile (istediğiniz dosya adına özgü bir alt desen kullanmaya çalışın). Veya sadece fareyi kullanarak dosya adını kopyalayın / yapıştırın.
Sadece eğlence için, soruyu tam anlamıyla cevaplıyoruz:
#!/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]])
Geçerli dizinin içeriği numaralandırılmış olarak listelenir. Numarayı seçtiğinizde öğe açılır:
...kolay:
Oturumu kapatıp tekrar açın ve sadece yazarak komutu kullanmaya başlayın
$ o
terminalde
Gizli dosyaları da göstermek istiyorsanız, değiştirin
show_hidden = False
içine:
show_hidden = True
~/bin
Zaten PATH'nizde değilse , eklemeniz gerekir (örneğin, export PATH="$PATH:~/bin"
içine .bashrc
veya benzeri bir çizgi koymak .profile
)
source ~/.profile
.
~/bin
hiçbir şeye dahil değildir. Ubuntu ve Debian ~/.profile
, hatları olan özellerle gönderilir if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" ; fi
. Mac OS X ve CentOS'ta bunu kendiniz yapılandırmanız gerekir. İyi bir şans, eğer Ubuntu bir kişiye BT departmanı tarafından sağlanırsa, şansın ~/.profile
varsayılan Ubuntu ile aynı olmayacağıdır, bu nedenle ~/bin
standart olmayan her zaman dikkat etmek iyi bir uygulamadır . Bash seçeneği ~/.profile
ile kabuğu başlatırsanız görmezden gelebilirsiniz--no-profile
Bash'te, python veya başka bir üçüncü taraf aracı çağırmadan ve tek bir hatla bunu yapmanıza izin veren az bilinen bir özellik vardır:
select file in *; do open "$file"; break; done
open
genellikle (Mac OS'de değilseniz) çalışmaz; xdg-open
muhtemelen çoğu GNU / Linux sisteminde hile yapacak.
Saf bash select
ifadesini kullanarak :
PS3='Quick, quick, give a number: '
select file in *
do
xdg-open "$file"
break
done
PS3'ü ayarlamak sadece göz alıcı. Dışarıda bırakırsanız, varsayılan istemi alırsınız. Break deyimini dışarıda bırakırsanız, select deyimi CTRL-D veya CTRL-C tuşlarına basıncaya kadar döngü yapar.
Tabii ki tek katmanlı olarak da çalıştırabilirsiniz:
select file in *; do xdg-open "$file"; break; done
mc
Midnight Commander'i kurabilir ve kullanabilirsiniz . Eski Norton Commander'dan esinlenen, kullanıcılar MSDOS (Windows'tan önce) kullandığında popüler olan menüler vb. İçeren bir metin kullanıcı arabirimidir.
sudo apt update
sudo apt install mc
ve bir terminal penceresinde veya bir metin ekranında başlatın,
mc
$ ls
results.log
string
Templates
textfile
time
time.save
vegetables
vegetablesbsh
Nasıl olur
ls | sed -n 3p
3. dosya adını yazdırır
Templates
Aç onu-
xdg-open "$(ls | sed -n 3p)"
Genellikle çalışır.
Bir senaryoya koy
#!/bin/bash
xdg-open "$(ls | sed -n "$1"p)"
Komut dosyasının adı: açık
Ana klasöre kaydedin. Çalıştırmak:
./open file_number
Linux dosya sistemlerinde, dosya adlarının inode adı verilen çok ilginç bir özelliği vardır : bir dizin (veya klasör) inode'ların listesidir ve dosya adları bu inode'ları gösterir. Bu nedenle, inode numarasını biliyorsanız, find
yardımcı programı kullanarak dosyayı bulmayı ve üzerinde belirli işlemleri gerçekleştirmeyi deneyebilirsiniz . Bu, özellikle farklı yerel ayarlarda, özel karakterlerde dosya adları ile uğraşırken veya yanlışlıkla adlandırılan dizin oluşturduğunuzda~
yararlıdır .
Örneğin,
$ 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
Bunun yaptığı, geçerli çalışma dizinini (ile temsil edilen .
) çevirmek ve 1103743 inode numaralı bir dosya olan dizin girişini aramaktır. Dosya bulunursa, xdg-open
dosyayı varsayılan uygulama ile açar ve sonra kapanır find
. Ekstra nedeni -and
ve -quit
önlemektir xdg-open
(iki kez aynı dosyayı açarak eşdeğerdir) dosyasına sabit bağlantıları mevcut ise dosyayı yeniden açmayı.
Bazı dosyalar oluşturun:
$ 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.
Dosyaları bir değişkene koyun ve dosyayı bir dizinle açın.
$ files=(*)
$ xdg-open "${files[12]}"
# Opens 12.txt in a text editor, which reads "This is file 12."
12
Açmaya çalıştığınız dizinle değiştirin .
Bu muhtemelen soruyu doğrudan cevaplayan en basit cevaptır. takip etmeyi dene:
touch file-1 file-2 file-3
Diyelim ki ikinci dosyayı açmak (veya düzenlemek) istiyoruz, şunları yapabiliriz:
echo `ls` | cut -d' ' -f2
bu, gerçekleştirmek istediğimiz komuta girdi olarak kullanabileceğimiz ikinci dosyanın adını verir, örneğin:
cat $( echo `ls` | cut -d' ' -f2 )
ikinci dosyanın içeriğini çıktılar.
ls argümanlarını değiştirerek dosyaların ls tarafından yazdırılma sırasını değiştirebileceğinizi unutmayın,
man ls
ayrıntılar için bkz .
[GÜNCELLEME] dosya adlarında boşluk olmadığınızı varsayar,
gözleminiz için @wjandrea teşekkürler.
ls
. Ayrıca geri tepmeler kullanımdan kaldırılmıştır. $()
Bunun yerine kullanın .