เป็นไปได้หรือไม่ที่จะเปิดไฟล์จากเครื่องเทอร์มินัลไม่ใช่โดยชื่อ แต่ด้วยตำแหน่ง (หมายเลข) ในโฟลเดอร์? หรือตัวเลือกอื่น ๆ
เพราะชื่อยาวเกินไป
Tab
ปุ่ม?
เป็นไปได้หรือไม่ที่จะเปิดไฟล์จากเครื่องเทอร์มินัลไม่ใช่โดยชื่อ แต่ด้วยตำแหน่ง (หมายเลข) ในโฟลเดอร์? หรือตัวเลือกอื่น ๆ
เพราะชื่อยาวเกินไป
Tab
ปุ่ม?
คำตอบ:
คุณอาจยังไม่ได้ค้นพบความTabสมบูรณ์ (ดูที่นี่ )
ในขณะที่พิมพ์ชื่อไฟล์ใน Terminal เพียงพิมพ์ตัวอักษรสองสามตัวแรกแล้วกด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
ไม่ได้ถูกสร้างให้เป็นอะไรเลย Ubuntu และ Debian เรือที่มีกำหนดเองที่มีเส้น~/.profile
if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" ; fi
ใน Mac OS X และ CentOS คุณต้องกำหนดค่าด้วยตัวเอง โอกาสที่ดีคือถ้า Ubuntu ให้แผนกไอทีแก่บุคคลโอกาสที่~/.profile
จะไม่เหมือนกับ Ubuntu เริ่มต้นดังนั้นจึงควรระวังที่~/bin
ไม่ได้มาตรฐาน Bash สามารถเพิกเฉย~/.profile
หากคุณเปิดตัวเชลล์ด้วย--no-profile
ตัวเลือก
มีคุณสมบัติที่รู้จักกันน้อยในทุบตีที่ช่วยให้คุณทำเช่นนี้โดยไม่ต้องเรียกร้องให้งูหลามหรือเครื่องมือของบุคคลที่สามอื่น ๆ และมีเส้นเดียวคือ
select file in *; do open "$file"; break; done
open
โดยทั่วไปแล้วจะไม่ทำงาน (ยกเว้นว่าคุณใช้ Mac OS) xdg-open
อาจจะทำเคล็ดลับในระบบ GNU / Linux ส่วนใหญ่
ในทุบตีบริสุทธิ์ใช้select
คำสั่ง:
PS3='Quick, quick, give a number: '
select file in *
do
xdg-open "$file"
break
done
การตั้งค่า PS3 เป็นเรื่องที่น่ากลัวมาก ถ้าคุณปล่อยให้มันออกมาคุณก็จะได้รับพรอมต์เริ่มต้น หากคุณไม่ใช้คำสั่ง break คำสั่ง select จะวนซ้ำจนกว่าคุณจะกด CTRL-D หรือ CTRL-C
แน่นอนคุณยังสามารถเรียกใช้มันเป็นหนึ่งซับ:
select file in *; do xdg-open "$file"; break; done
คุณสามารถติดตั้งและใช้งานmc
, ผู้บัญชาการเที่ยงคืน เป็นอินเทอร์เฟซผู้ใช้ข้อความพร้อมเมนูและอื่น ๆ ที่ได้รับแรงบันดาลใจจาก Norton Commander เก่าซึ่งเป็นที่นิยมเมื่อผู้ใช้ MSDOS (ก่อน Windows)
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)"
ชื่อของสคริปต์: เปิด
บันทึกไว้ในโฟลเดอร์บ้าน วิ่ง:
./open file_number
บนระบบไฟล์ Linux ชื่อไฟล์มีคุณสมบัติที่น่าสนใจมากที่เรียกว่าinode : a directory (หรือโฟลเดอร์) คือรายชื่อของ inodes และชื่อไฟล์ที่ชี้ไปที่ inodes เหล่านั้น ดังนั้นถ้าคุณรู้หมายเลขไอโหนดคุณสามารถพยายามค้นหาไฟล์โดยใช้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 สำหรับการสังเกตของคุณ