ターミナルからファイルを名前ではなくフォルダ内の(番号)位置で開くことはできますか?または他のオプション?
名前が長すぎるからです。
あなたはおそらく発見していません Tab-完了( ここ を参照)。
ターミナルでファイル名を入力するときは、最初の数文字を入力して、 Tab そして魔法を見てください!
楽しみのために、文字通り質問に答えます:
#!/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
Bashにはあまり知られていない機能があり、pythonまたはその他のサードパーティツールを呼び出さずに1行でこれを行うことができます。
select file in *; do open "$file"; break; done
純粋なbashでは、select
ステートメントを使用します。
PS3='Quick, quick, give a number: '
select file in *
do
xdg-open "$file"
break
done
PS3の設定は目を見張るものです。省略した場合は、デフォルトのプロンプトが表示されます。 breakステートメントを省略すると、CTRL-DまたはCTRL-Cを押すまで、selectステートメントがループします。
もちろん、ワンライナーとして実行することもできます:
select file in *; do xdg-open "$file"; break; done
mc
、Midnight Commanderをインストールして使用できます。これは、古いWindowsの前にMSDOSを使用していたときに人気があった古いノートンコマンダーに触発されたメニューなどを備えたテキストユーザーインターフェイスです。
Sudo apt update
Sudo apt install mc
ターミナルウィンドウまたはテキスト画面で起動します。
mc
_$ ls
_
_results.log
string
Templates
textfile
time
time.save
vegetables
vegetablesbsh
_
どのように試合
_ls | sed -n 3p
_
印刷rdファイル名
Templates
それを開く-
xdg-open "$(ls | sed -n 3p)"
通常は機能します。
スクリプトに入れます
_#!/bin/bash
xdg-open "$(ls | sed -n "$1"p)"
_
スクリプトの名前:オープン
ホームフォルダに保存してください。実行:
_./open file_number
_
Linuxファイルシステムでは、ファイル名には inode と呼ばれる非常に興味深いプロパティがあります。ディレクトリ(またはフォルダー)はiノードのリストであり、どのファイル名がそれらのiノードを指しているかを示します。したがって、iノード番号がわかっている場合は、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
これは、現在の作業ディレクトリ(.
で表される)を走査して、iノード番号1103743のファイルであるディレクトリエントリを探します。ファイルが見つかった場合、xdg-open
はデフォルトのアプリケーションでファイルを開き、find
は終了しますその後。追加の-and
および-quit
の理由は、ファイルへのハードリンクが存在する場合にxdg-open
がファイルを再度開くのを防ぐためです(これは、同じファイルを2回開くのと同じです)。
いくつかのファイルを作成します。
$ 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
2番目のファイルを開く(または編集する)場合は、次のようにします。
echo `ls` | cut -d' ' -f2
これにより、2番目のファイルの名前が出力されます。これは、実行するコマンドへの入力として使用できます。次に例を示します。
cat $( echo `ls` | cut -d' ' -f2 )
2番目のファイルの内容を出力します。
ls引数を調整することにより、ファイルがlsによって出力される順序を変更できることに注意してください。詳細については、
man ls
を参照してください。
[更新]これは、ファイル名に空白がないことを前提としています。
@ wjandreaのご理解に感謝いたします。