Changer de répertoire et lister les fichiers en une seule commande dans Fish Shell
Si vous utilisez souvent la ligne de commande sur Linux, vous avez probablement souhaité un moyen plus rapide de naviguer dans les répertoires et de voir leur contenu.
En général, cela implique d'exécuter cd pour changer de répertoire puis ls pour lister les fichiers. Bien que combiner ces commandes en une seule semble être une bonne idée, cela peut causer des problèmes lorsqu'on traite des répertoires contenant beaucoup de fichiers.
Dans ce guide, nous vous montrerons comment combiner en toute sécurité cd et ls dans Fish Shell en utilisant la commande timeout. Cela vous permet de changer rapidement de répertoire et de lister les fichiers en une seule commande tout en veillant à ce que votre shell reste réactif, même dans des répertoires contenant un grand nombre de fichiers.
Pourquoi combiner cd et ls ?
Par défaut, lorsque vous utilisez cd pour changer de répertoire, Fish (ou tout autre shell) n'affiche pas les fichiers dans le nouvel emplacement. Exécuter ls séparément à chaque fois peut être répétitif. Combiner ces commandes facilite la visualisation du contenu d'un répertoire sans étapes supplémentaires.
Cependant, il y a un hic : lister le contenu d'un répertoire contenant des millions de fichiers peut provoquer le blocage de votre shell, consommant des ressources excessives et rendant votre terminal non réactif.
Pas de souci ! Dans les étapes suivantes, nous fournirons toutes les façons possibles de combiner les commandes cd et ls.
Méthode 1 : Commande à usage unique
Si vous devez le faire une seule fois, vous pouvez utiliser la commande suivante :
cd /path/to/directory; and lsRemplacez /path/to/directory par le dossier que vous souhaitez ouvrir. Le and garantit que ls s'exécute uniquement si cd réussit.
Le problème de la liste automatique du contenu des répertoires
L'exécution automatique de ls après chaque cd peut entraîner :
- Problèmes de performance : Lister des millions de fichiers peut prendre beaucoup de temps et utiliser beaucoup de CPU et de mémoire.
- Shell non réactif : Votre terminal pourrait se figer en essayant de lister les fichiers.
- Sortie Inutile : Parfois, vous n’avez pas besoin de voir le contenu d’un répertoire immédiatement après y être allé.
Pour éviter ces problèmes, nous avons besoin d'un moyen plus intelligent de combiner cd et ls.
Méthode 2 : Créer une fonction Fish personnalisée avec timeout
La commande timeout vous permet d’exécuter une commande avec une limite de temps. Si la commande ne se termine pas dans le temps spécifié, elle est arrêtée. Cela est parfait pour empêcher ls de se bloquer dans des répertoires contenant trop de fichiers.
Voici comment créer une fonction Fish shell qui combine cd et ls en toute sécurité en utilisant timeout.
Étape 1 : Créez la fonction
Ouvrez votre fichier de configuration Fish shell (~/.config/fish/config.fish) dans un éditeur de texte :
nano ~/.config/fish/config.fishAjoutez la fonction suivante :
function cdls
# Change to the specified directory
builtin cd $argv[1]
and begin
# List directory contents with a timeout of 1 second
echo "Changed to directory: $PWD"
timeout 1s ls -l
end
endVoici la répartition de la fonction ci-dessus.
builtin cd $argv[1]: Change le répertoire spécifié.and begin ... end: Assure que les commandes suivantes ne s'exécutent que sicdréussit.timeout 1s ls -l: Exécutels -lavec un délai d'attente de 1 seconde. Silsprend plus d'une seconde, il est terminé.echo "Changed to directory: $PWD": Affiche le chemin du répertoire actuel pour plus de clarté.
Vous pouvez également utiliser cette fonction compacte :
function cdls
cd $argv; and timeout 1s ls -l
endIl suffit d'utiliser l'une des fonctions ci-dessus. Elles accomplissent toutes les deux la même tâche. Si vous voulez utiliser les deux fonctions, donnez simplement à chacune un nom unique.
Étape 2 : Enregistrer et recharger la configuration
Enregistrez le fichier et rechargez la configuration du shell Fish pour appliquer les modifications :
source ~/.config/fish/config.fishÉtape 3 : Utilisez la commande cdls
Maintenant, vous pouvez utiliser la commande cdls pour changer de répertoire et en lister le contenu en toute sécurité :
cdls /path/to/directoryExemple:
cdls enlightenment/sources/e26/Si le répertoire contient un nombre gérable de fichiers, ls -l s'exécutera en moins d'une seconde, et vous verrez la liste. Si le répertoire est trop grand, timeout arrêtera la commande ls après 1 seconde, empêchant votre shell de se bloquer.
Exemple de sortie :
Changed to directory: /home/ostechnix/enlightenment/sources/e26
total 56
drwxrwxr-x 7 ostechnix ostechnix 4096 Jan 17 19:13 ecrire
drwxrwxr-x 11 ostechnix ostechnix 4096 Jan 17 19:13 edi
drwxrwxr-x 18 ostechnix ostechnix 4096 Jan 17 19:02 efl
drwxrwxr-x 12 ostechnix ostechnix 4096 Jan 17 19:14 eflete
drwxrwxr-x 11 ostechnix ostechnix 4096 Jan 17 19:10 enlightenment
drwxrwxr-x 8 ostechnix ostechnix 4096 Jan 17 19:14 enlightenment-module-forecasts
drwxrwxr-x 8 ostechnix ostechnix 4096 Jan 17 19:14 enlightenment-module-penguins
drwxrwxr-x 7 ostechnix ostechnix 4096 Jan 17 19:14 enlightenment-module-places
drwxrwxr-x 7 ostechnix ostechnix 4096 Jan 17 19:14 entice
drwxrwxr-x 9 ostechnix ostechnix 4096 Jan 17 19:13 enventor
drwxrwxr-x 7 ostechnix ostechnix 4096 Jan 17 19:12 ephoto
drwxrwxr-x 7 ostechnix ostechnix 4096 Jan 17 19:13 evisum
drwxrwxr-x 7 ostechnix ostechnix 4096 Jan 17 19:13 express
drwxrwxr-x 6 ostechnix ostechnix 4096 Jan 17 19:13 ragePersonnalisation du délai d'attente
Vous pouvez ajuster la durée du délai d'attente selon vos besoins. Par exemple :
- Utilisez
0.5spour un délai d'attente plus court :timeout 0.5s ls -l - Utilisez
2spour un délai d'attente plus long :timeout 2s ls -l
Il suffit de modifier la valeur timeout dans la fonction.
Optionnel : Remplacer la commande cd par défaut
Si vous voulez que ce comportement s'applique à la commande cd par défaut, redéfinissez cd dans la configuration de votre shell Fish :
function cd
builtin cd $argv[1]
and begin
echo "Changed to directory: $PWD"
timeout 1s ls -l
end
endMaintenant, chaque fois que vous utilisez cd, il affichera automatiquement le contenu du répertoire avec un délai d'attente d'une seconde.
Méthode 3 : Utiliser une abréviation
Le shell Fish prend en charge les abréviations, qui se développent en commandes complètes lorsque vous les tapez. Pour créer une abréviation pour cd qui inclut ls, exécutez :
abbr --add cd 'cd $argv; and timeout 1s ls -l'Cette méthode est utile car elle conserve la commande cd originale tout en exécutant automatiquement ls avec un délai d'attente pour éviter les blocages.
Bonus : Utilisez exa pour un listing plus rapide
Si vous travaillez fréquemment avec de grands répertoires, envisagez d'utiliser exa, une alternative moderne à ls. exa est plus rapide et offre plus de fonctionnalités, ce qui le rend mieux adapté pour gérer des répertoires contenant de nombreux fichiers.
Voici comment modifier la fonction pour utiliser exa :
function cdls
builtin cd $argv[1]
and begin
echo "Changed to directory: $PWD"
timeout 1s exa -l
end
endNous avons déjà compilé une liste d'alternatives modernes aux commandes Linux populaires. Cette liste fournit les meilleures remplacements pour les anciennes commandes classiques de Linux. Veuillez visiter le lien suivant pour plus de détails :
- Les meilleurs commandes Linux modernes pour débutants et experts
Supprimer la fonction poisson
Si vous ne voulez plus utiliser la fonction fish cdls, supprimez simplement les lignes que vous avez ajoutées dans le fichier de configuration de fish. Après avoir supprimé ces lignes, rechargez la configuration de fish en utilisant la commande :
source ~/.config/fish/config.fishSi vous avez ajouté l'abréviation pour cd dans le shell Fish comme indiqué dans la Méthode 3, vous pouvez la supprimer en utilisant la commande :
abbr --erase cdCela supprimera l'abréviation et restaurera le comportement par défaut de cd. Si vous voulez vous assurer que l'abréviation est définitivement supprimée, vérifiez votre fichier ~/.config/fish/config.fish et supprimez toute ligne qui définit abbr --add cd.
Conservez les fonctions dans un répertoire séparé pour une gestion facile
Comme vous l'avez peut-être remarqué, j'ai enregistré la fonction dans le fichier de configuration Fish dans ce tutoriel. Bien que cela fonctionne, ce n'est pas la meilleure approche.
Ajouter plus de fonctions peut encombrer le fichier de configuration, le rendant plus difficile à gérer. Pour le garder propre, stockez chaque fonction Fish dans son propre fichier à l'intérieur d'un répertoire séparé. Pour plus de détails, veuillez lire le guide suivant :
- Comment gérer les fonctions dans Fish Shell sur Linux
Conclusion
Combiner cd et ls dans le shell Fish est un excellent moyen de simplifier la navigation en ligne de commande sous Linux. En utilisant la commande timeout, vous pouvez effectuer une liste automatique des répertoires sans risquer de problèmes de performance ou un shell non réactif.
Que vous utilisiez une commande ponctuelle, une fonction personnalisée ou une abréviation, ajouter un délai d'attente garantit que vous évitez les problèmes de performance lorsque vous traitez de grands répertoires. En utilisant ces méthodes, vous pouvez rendre la navigation dans les répertoires du shell Fish plus rapide et plus efficace.
Lecture Connexe:
- [Astuces Bash] Comment utiliser cd et ls en une seule commande
- Comment naviguer plus rapidement dans les répertoires sous Linux
