टर्मिनल से एक डॉक खोलें, लेकिन इसके नाम से नहीं


19

क्या टर्मिनल से फ़ाइल को उसके नाम से नहीं बल्कि फ़ोल्डर में उसकी (संख्या) स्थिति से खोलना संभव है? या कोई अन्य विकल्प?

क्योंकि नाम बहुत लंबा है।


5
कृपया संपादित करें और एक उदाहरण दें कि आप क्या करना चाहते हैं।
मिठाई

7
नहीं, बिना कोडिंग के नहीं। लेकिन आप "टैब" पूरा होने का उपयोग कर सकते हैं।
रिन्जविंड

2
बहुत देर किस लिए?
कार्ल विटथॉफ्ट

2
क्या आपने फ़ाइल नाम के पहले दो या तीन अक्षरों को टाइप करने की कोशिश की है और फिर Tabकुंजी दबाएं?
हेनरिक

जवाबों:


44

आपने शायद अभी तक खोज नहीं की है Tab( यहाँ देखें )।

टर्मिनल में फ़ाइल नाम टाइप करते समय बस पहले कुछ अक्षर टाइप करें और हिट करें Tabऔर जादू देखें!


7
या बस फ़ाइल नाम के पहले कुछ अक्षर टाइप करें, और एक *, यदि आप किसी कारण के लिए टैब-पूर्णता का उपयोग नहीं करना चाहते हैं। या यहां तक ​​कि *abc*अगर फ़ाइलनाम में abcकहीं भी शामिल है (एक उपपट्ट का उपयोग करने का प्रयास करें जो आप चाहते हैं फ़ाइल नाम के लिए अद्वितीय है)। या माउस का उपयोग करके फ़ाइल नाम को कॉपी / पेस्ट करें।
गुंटराम ब्लोम

4
@guntram या आप टर्मिनल पर फ़ाइलों को भी ड्रॉप कर सकते हैं।
पोम्स्की

6
@GuntramBlohm आपको वह उत्तर देना चाहिए। मुझे लगता है कि यह इस जवाब से अलग है कि यह अपने दम पर खड़ा हो।
DQdlM

32

बस मज़े के लिए, शाब्दिक रूप से इस सवाल का जवाब:

यहाँ छवि विवरण दर्ज करें

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

यह व्यवहार में कैसे काम करता है

  1. टर्मिनल में, काम करने वाले डायर में, "ओ" (कमांड के रूप में) चलाएं
  2. वर्तमान निर्देशिका की सामग्री सूचीबद्ध, क्रमांकित है। नंबर चुनें और आइटम खोला गया है:

    यहाँ छवि विवरण दर्ज करें

सेट अप

...आसान है:

  1. बनाएं, अगर यह अभी तक मौजूद नहीं है, तो आपके होम डायरेक्टरी में "बिन" नाम का एक फ़ोल्डर
  2. स्क्रिप्ट को एक खाली फ़ाइल में कॉपी करें, इसे (शाब्दिक) "ओ" (कोई एक्सटेंशन नहीं) के रूप में सहेजें, और इसे निष्पादन योग्य बनाएं
  3. लॉग आउट करें और केवल टाइप करके कमांड का उपयोग शुरू करें

    $ o
    

    टर्मिनल में

एनबी

यदि आप छिपी हुई फ़ाइलों को भी दिखाना चाहते हैं, तो बदलें

show_hidden = False

में:

show_hidden = True

1
यदि ~/binआपके पथ में पहले से ही नहीं है, आप इसे जोड़ने के लिए (उदाहरण के लिए, की तरह एक लाइन डालने होगा export PATH="$PATH:~/bin"में .bashrcया .profile।)
निक Matteo

B0fh का उत्तर देखें - यह एक बिल्ट-इन से बनाया गया लगता है
मर्गेसिसेया

1
@kundor nope, Ubuntu पर नहीं। लॉग आउट करें और नौकरी में, या बस source ~/.profile
४m पर जैकब व्लिजम

@JacobVlijm ~/binकिसी भी चीज़ में नहीं बनाया गया है। उबंटू और डेबियन जहाज कस्टम के साथ ~/.profileजिसमें लाइनें हैं if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" ; fi। Mac OS X और CentOS पर आपको स्वयं को कॉन्फ़िगर करना होगा। एक अच्छा मौका यह है कि यदि उबंटू को आईटी विभाग द्वारा किसी व्यक्ति को प्रदान किया जाता है, तो संभावना ~/.profileयह नहीं है कि वह डिफ़ॉल्ट उबंटू के समान हो, इसलिए यह हमेशा अच्छा है कि ~/binमानक नहीं है। बैश भी अनदेखा कर सकते हैं ~/.profileयदि आप --no-profileविकल्प के साथ शेल लॉन्च करते हैं
सर्जियो कोलोडियाज़नी

@mgarciaisaia मूल टिप्पणी आपके लिए थी, वास्तव में ^
सर्गी कोलोडियाज़नी

28

बैश में एक अल्पज्ञात विशेषता है जो आपको अजगर या किसी अन्य तृतीय-पक्ष उपकरण पर कॉल किए बिना और एक लाइन के साथ ऐसा करने की अनुमति देता है:

select file in *; do open "$file"; break; done

8
अति उत्कृष्ट! openआम तौर पर काम नहीं करेगा, हालांकि (जब तक आप मैक ओएस पर नहीं हैं); xdg-openशायद अधिकांश GNU / Linux सिस्टम पर चाल चलेगा।
निक मैट्टो

1
लेकिन बैश अस्तित्व में एकमात्र शेल नहीं है, आप जानते हैं :-)
jamesqf

16

शुद्ध बैश में, 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

एक समाधान के सरल पर्याप्त और काफी अच्छी तरह से काम करता है। आप एक कदम आगे जा सकते हैं और इससे एक उपनाम या कार्य कर सकते हैं
सर्गी कोलोडाज़नी

7

आप mcमध्यरात्रि कमांडर को स्थापित और उपयोग कर सकते हैं । यह पुराने नॉर्टन कमांडर द्वारा प्रेरित मेनू आदि के साथ एक पाठ उपयोगकर्ता इंटरफ़ेस है, जो तब लोकप्रिय था जब लोग MSDOS (विंडोज से पहले) का उपयोग करते थे।

sudo apt update
sudo apt install mc

और इसे टर्मिनल विंडो या टेक्स्ट स्क्रीन में शुरू करें,

mc

5

$ 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



3

लिनक्स फाइलसिस्टम पर, फ़ाइलनाम में एक बहुत ही दिलचस्प संपत्ति होती है जिसे इनोड कहा जाता है : एक निर्देशिका (या फ़ोल्डर) इनोड्स की एक सूची है और जो फाइलनाम उन आयतों को इंगित करता है। इसलिए, यदि आप इनोड नंबर जानते हैं, तो आप फ़ाइल का उपयोग करके पता लगाने का प्रयास कर सकते हैं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फिर से खोलने से रोकना है यदि फ़ाइल के लिए हार्ड लिंक मौजूद हैं (जो एक ही बार दो बार खोलने के बराबर है)।


1

कुछ फाइलें बनाएं:

$ 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उस इंडेक्स से बदलें जिसे आप खोलने की कोशिश कर रहे हैं।


मैं $ के बजाय {00..20} पसंद करूंगा (seq -w 0 20) क्योंकि यह स्पॉन से कम सिर्फ एक बाहरी प्रक्रिया है। मैं हालांकि पोर्टेबिलिटी के बारे में निश्चित नहीं हूं। बैश-इस्म हो सकता है; ;-)
ऑस्कर

0

यह शायद सबसे सरल उत्तर है जो सीधे सवाल का जवाब देता है। निम्नलिखित प्रयास करें:

touch file-1 file-2 file-3

मान लें कि हम दूसरी फ़ाइल खोलना चाहते हैं (या संपादित करना चाहते हैं), हम निम्नलिखित कर सकते हैं:

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

यह दूसरी फ़ाइल के नाम को आउटपुट करेगा, जिसका उपयोग हम उस कमांड के इनपुट के रूप में कर सकते हैं जिसे हम प्रदर्शन करना चाहते हैं, उदाहरण के लिए:

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

दूसरी फ़ाइल की सामग्री का उत्पादन करेगा।

ध्यान दें कि आप उस क्रम को बदल सकते हैं जिसमें फाइलें ls द्वारा छपी हैं, ls तर्कों को जोड़कर, man lsविवरण के लिए देखें।

[अद्यतन] यह मानता है कि आपके पास फ़ाइल नामों में कोई श्वेत-रिक्त स्थान नहीं है,
धन्यवाद @wjandrea आपके अवलोकन के लिए।


2
यह उन फ़ाइलनामों के लिए विफल हो जाएगा जिनमें रिक्त स्थान हैं। यह उत्तर उसी के आसपास मिलता है, लेकिन यह अभी भी पार्स करने के लिए एक बुरा विचार है ls। इसके अलावा बैकटिक्स को हटा दिया गया है। $()इसके बजाय उपयोग करें ।
वेजेंड्रिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.