ターミナルからファイルを名前ではなくフォルダ内の(番号)位置で開くことはできますか?または他のオプション?
名前が長すぎるからです。
Tab
キーを押してみましたか?
ターミナルからファイルを名前ではなくフォルダ内の(番号)位置で開くことはできますか?または他のオプション?
名前が長すぎるからです。
Tab
キーを押してみましたか?
回答:
Tab-completion(ここを参照)をまだ発見していない可能性があります。
ターミナルでファイル名を入力するときに、最初の数文字を入力するだけで、ヒット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
、あなたのPATHになっていない、あなたはそれを追加する必要があります(のような行を入れて、例えば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では、自分で設定する必要があります。IT部門からUbuntuが提供された場合、チャンスは~/.profile
デフォルトのUbuntuと同じではないため、常に~/bin
標準ではないことに注意することをお勧めします。オプションで~/.profile
シェルを起動した場合、Bashは無視することもでき--no-profile
ます
純粋な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
$ ls
results.log
string
Templates
textfile
time
time.save
vegetables
vegetablesbsh
どのように試合
ls | sed -n 3p
プリント第三のファイル名
Templates
それを開く-
xdg-open "$(ls | sed -n 3p)"
通常は機能します。
スクリプトに入れる
#!/bin/bash
xdg-open "$(ls | sed -n "$1"p)"
スクリプトの名前:open
ホームフォルダーに保存します。実行:
./open file_number
Linuxファイルシステムでは、ファイル名にはiノードと呼ばれる非常に興味深いプロパティがあります。ディレクトリ(またはフォルダ)はiノードのリストであり、どのファイル名がそれらのiノードを指します。したがって、inode番号がわかっている場合は、find
utility を使用してファイルを見つけ、特定の操作を実行できます。これは、異なるロケールのファイル名、特殊文字を処理する場合~
、またはというディレクトリを誤って作成した場合に特に便利です。
例えば、
$ 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
これは、現在の作業ディレクトリ(で表される.
)を走査し、inode番号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 に感謝します。
ls
. Also backticks are deprecated. Use $()
instead.