Est-il possible d'ouvrir un fichier à partir du terminal non pas par son nom mais par sa position (numéro) dans le dossier? Ou toute autre option?
Parce que le nom est trop long.
Tab
touche?
Est-il possible d'ouvrir un fichier à partir du terminal non pas par son nom mais par sa position (numéro) dans le dossier? Ou toute autre option?
Parce que le nom est trop long.
Tab
touche?
Réponses:
Vous n'avez probablement pas encore découvert Tab-achèvement (voir ici ).
En tapant un nom de fichier dans Terminal, tapez simplement les premières lettres et frappez Tabet voyez la magie!
*
, si vous ne voulez pas utiliser la complétion de tabulation pour une raison quelconque. Ou même *abc*
si le nom de fichier contient abc
quelque part (essayez d'utiliser un sous-modèle unique au nom de fichier que vous souhaitez). Ou copiez / collez simplement le nom de fichier à l'aide de la souris.
Juste pour le plaisir, répondant littéralement à la question:
#!/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]])
Le contenu du répertoire actuel est répertorié, numéroté. Choisissez le numéro et l'article est ouvert:
...est facile:
Déconnectez-vous et reconnectez-vous et commencez à utiliser la commande en tapant simplement
$ o
dans le terminal
Si vous souhaitez également afficher les fichiers masqués, modifiez
show_hidden = False
dans:
show_hidden = True
~/bin
n'est pas déjà dans votre PATH, vous devrez l'ajouter (par exemple, en mettant une ligne comme export PATH="$PATH:~/bin"
dans .bashrc
ou .profile
.)
source ~/.profile
.
~/bin
n'est intégré à rien du tout. Ubuntu et Debian sont livrés avec une coutume ~/.profile
qui a des lignes if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" ; fi
. Sur Mac OS X et CentOS, vous devez le configurer vous-même. Une bonne chance est que si Ubuntu est fourni à une personne par le service informatique, il y a de fortes chances que ce ~/.profile
ne soit pas le même que Ubuntu par défaut, c'est donc une bonne pratique de toujours se méfier de ce qui ~/bin
n'est pas standard. Bash peut également ignorer ~/.profile
si vous lancez le shell avec --no-profile
option
Il existe une fonctionnalité peu connue dans Bash qui vous permet de le faire sans faire appel à python ou tout autre outil tiers, et avec une seule ligne:
select file in *; do open "$file"; break; done
open
ne fonctionne généralement pas, cependant (sauf si vous êtes sous Mac OS); xdg-open
fera probablement l'affaire sur la plupart des systèmes GNU / Linux.
En pur bash, en utilisant l' select
instruction:
PS3='Quick, quick, give a number: '
select file in *
do
xdg-open "$file"
break
done
La configuration de la PS3 est tout simplement épatante. Si vous l'omettez, vous obtiendrez simplement l'invite par défaut. Si vous omettez l'instruction break, l'instruction select sera mise en boucle jusqu'à ce que vous appuyiez sur CTRL-D ou CTRL-C.
Bien sûr, vous pouvez également l'exécuter en une seule ligne:
select file in *; do xdg-open "$file"; break; done
Vous pouvez installer et utiliser mc
Midnight Commander. Il s'agit d'une interface utilisateur textuelle avec des menus, etc. inspirée de l'ancien Norton Commander, qui était populaire lorsque les gens utilisaient MSDOS (avant Windows).
sudo apt update
sudo apt install mc
et le démarrer dans une fenêtre de terminal ou dans un écran de texte,
mc
$ ls
results.log
string
Templates
textfile
time
time.save
vegetables
vegetablesbsh
Comment combat
ls | sed -n 3p
Imprime le troisième nom de fichier
Templates
Ouvrez-le
xdg-open "$(ls | sed -n 3p)"
Fonctionne généralement.
Mettez-le dans un script
#!/bin/bash
xdg-open "$(ls | sed -n "$1"p)"
Nom du script: ouvert
Enregistrez-le dans le dossier d'accueil. Courir:
./open file_number
Sur les systèmes de fichiers Linux, les noms de fichiers ont une propriété très intéressante appelée inode : un répertoire (ou dossier) est une liste d'inodes et quels noms de fichiers pointent vers ces inodes. Donc, si vous connaissez le numéro d'inode, vous pouvez essayer de localiser le fichier à l'aide de l' find
utilitaire et effectuer certaines opérations dessus. Cela est particulièrement utile lorsque vous traitez des noms de fichiers dans des paramètres régionaux différents, des caractères spéciaux ou lorsque vous avez créé accidentellement un répertoire appelé~
.
Par exemple,
$ 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
Cela permet de parcourir le répertoire de travail actuel (représenté par .
) et de rechercher l'entrée de répertoire qui est un fichier avec le numéro d'inode 1103743. Si le fichier est trouvé, xdg-open
ouvrira le fichier avec l'application par défaut et find
quittera ensuite. La raison de la supplémentaire -and
et -quit
est d'empêcher la xdg-open
réouverture du fichier s'il existe des liens durs vers le fichier ( ce qui équivaut à ouvrir le même fichier deux fois).
Créez des fichiers:
$ 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.
Mettez les fichiers dans une variable et ouvrez le fichier par un index.
$ files=(*)
$ xdg-open "${files[12]}"
# Opens 12.txt in a text editor, which reads "This is file 12."
Remplacez 12
par l'index que vous essayez d'ouvrir.
C'est probablement la réponse la plus simple qui répond directement à la question. essayez ce qui suit:
touch file-1 file-2 file-3
Disons que nous voulons ouvrir (ou éditer) le deuxième fichier, nous pouvons faire ce qui suit:
echo `ls` | cut -d' ' -f2
cela affichera le nom du deuxième fichier, que nous pouvons utiliser comme entrée pour la commande que nous voulons effectuer, par exemple:
cat $( echo `ls` | cut -d' ' -f2 )
affichera le contenu du deuxième fichier.
notez que vous pouvez changer l'ordre dans lequel les fichiers sont imprimés par ls, en modifiant les arguments ls, voir
man ls
pour plus de détails.
[MISE À JOUR] cela suppose que vous n'avez pas d'espaces blancs dans les noms de fichiers,
merci @wjandrea pour votre observation.
ls
. Les backticks sont également déconseillés. Utilisez $()
plutôt.