क्या टर्मिनल से फ़ाइल को उसके नाम से नहीं बल्कि फ़ोल्डर में उसकी (संख्या) स्थिति से खोलना संभव है? या कोई अन्य विकल्प?
क्योंकि नाम बहुत लंबा है।
Tab
कुंजी दबाएं?
क्या टर्मिनल से फ़ाइल को उसके नाम से नहीं बल्कि फ़ोल्डर में उसकी (संख्या) स्थिति से खोलना संभव है? या कोई अन्य विकल्प?
क्योंकि नाम बहुत लंबा है।
Tab
कुंजी दबाएं?
जवाबों:
आपने शायद अभी तक खोज नहीं की है Tab( यहाँ देखें )।
टर्मिनल में फ़ाइल नाम टाइप करते समय बस पहले कुछ अक्षर टाइप करें और हिट करें Tabऔर जादू देखें!
*
, यदि आप किसी कारण के लिए टैब-पूर्णता का उपयोग नहीं करना चाहते हैं। या यहां तक कि *abc*
अगर फ़ाइलनाम में abc
कहीं भी शामिल है (एक उपपट्ट का उपयोग करने का प्रयास करें जो आप चाहते हैं फ़ाइल नाम के लिए अद्वितीय है)। या माउस का उपयोग करके फ़ाइल नाम को कॉपी / पेस्ट करें।
बस मज़े के लिए, शाब्दिक रूप से इस सवाल का जवाब:
#!/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
~/bin
आपके पथ में पहले से ही नहीं है, आप इसे जोड़ने के लिए (उदाहरण के लिए, की तरह एक लाइन डालने होगा export PATH="$PATH:~/bin"
में .bashrc
या .profile
।)
source ~/.profile
।
~/bin
किसी भी चीज़ में नहीं बनाया गया है। उबंटू और डेबियन जहाज कस्टम के साथ ~/.profile
जिसमें लाइनें हैं if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" ; fi
। Mac OS X और CentOS पर आपको स्वयं को कॉन्फ़िगर करना होगा। एक अच्छा मौका यह है कि यदि उबंटू को आईटी विभाग द्वारा किसी व्यक्ति को प्रदान किया जाता है, तो संभावना ~/.profile
यह नहीं है कि वह डिफ़ॉल्ट उबंटू के समान हो, इसलिए यह हमेशा अच्छा है कि ~/bin
मानक नहीं है। बैश भी अनदेखा कर सकते हैं ~/.profile
यदि आप --no-profile
विकल्प के साथ शेल लॉन्च करते हैं
बैश में एक अल्पज्ञात विशेषता है जो आपको अजगर या किसी अन्य तृतीय-पक्ष उपकरण पर कॉल किए बिना और एक लाइन के साथ ऐसा करने की अनुमति देता है:
select file in *; do open "$file"; break; done
open
आम तौर पर काम नहीं करेगा, हालांकि (जब तक आप मैक ओएस पर नहीं हैं); xdg-open
शायद अधिकांश GNU / Linux सिस्टम पर चाल चलेगा।
शुद्ध बैश में, select
कथन का उपयोग करते हुए:
PS3='Quick, quick, give a number: '
select file in *
do
xdg-open "$file"
break
done
PS3 सेट करना सिर्फ आईकैंडी है। यदि आप इसे छोड़ देते हैं, तो आपको बस डिफ़ॉल्ट प्रॉम्प्ट मिलेगा। यदि आप ब्रेक स्टेटमेंट को छोड़ देते हैं, तो CTRL-D या CTRL-C हिट करने तक सेलेक्ट स्टेटमेंट लूप हो जाएगा।
बेशक आप इसे वन-लाइनर के रूप में भी चला सकते हैं:
select file in *; do xdg-open "$file"; break; done
आप mc
मध्यरात्रि कमांडर को स्थापित और उपयोग कर सकते हैं । यह पुराने नॉर्टन कमांडर द्वारा प्रेरित मेनू आदि के साथ एक पाठ उपयोगकर्ता इंटरफ़ेस है, जो तब लोकप्रिय था जब लोग MSDOS (विंडोज से पहले) का उपयोग करते थे।
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)"
स्क्रिप्ट का नाम: खुला
इसे होम फोल्डर में सेव करें। Daud:
./open file_number
लिनक्स फाइलसिस्टम पर, फ़ाइलनाम में एक बहुत ही दिलचस्प संपत्ति होती है जिसे इनोड कहा जाता है : एक निर्देशिका (या फ़ोल्डर) इनोड्स की एक सूची है और जो फाइलनाम उन आयतों को इंगित करता है। इसलिए, यदि आप इनोड नंबर जानते हैं, तो आप फ़ाइल का उपयोग करके पता लगाने का प्रयास कर सकते हैं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
यह क्या करता है वर्तमान में काम कर रहे निर्देशिका (द्वारा प्रतिनिधित्व किया गया है .
) और निर्देशिका प्रविष्टि है कि इनोड संख्या 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 आपके अवलोकन के लिए।
ls
। इसके अलावा बैकटिक्स को हटा दिया गया है। $()
इसके बजाय उपयोग करें ।