Naviguer dans le Système
Une caractéristique intrinsèque d'un shell est la capacité à naviguer et interagir avec le système de fichiers. Nushell ne fait évidemment pas exception. Voici quelques commandes courantes que vous pourriez utiliser pour interagir avec le système de fichiers :
Affichage du Contenu d'un Répertoire
> ls
Comme vu dans d'autres chapitres, la commande ls
retourne le contenu d'un répertoire. La commande ls
de Nushell retourne les éléments sous forme de tableau.
La commande ls
accepte également un argument optionnel pour spécifier ce que vous souhaitez afficher. Par exemple, nous pouvons lister les fichiers se terminant par « .md » :
> ls *.md
───┬────────────────────┬──────┬─────────┬────────────
# │ name │ type │ size │ modified
───┼────────────────────┼──────┼─────────┼────────────
0 │ CODE_OF_CONDUCT.md │ File │ 3.4 KB │ 5 days ago
1 │ CONTRIBUTING.md │ File │ 886 B │ 5 days ago
2 │ README.md │ File │ 15.0 KB │ 5 days ago
3 │ TODO.md │ File │ 1.6 KB │ 5 days ago
───┴────────────────────┴──────┴─────────┴────────────
Patterns de Glob (wildcards)
L'astérisque (*
) dans l'argument optionnel *.md
est parfois appelé caractère générique, wildcard, ou glob. Il nous permet de matcher n'importe quoi. Vous pouvez lire ce glob *.md
comme "match n'importe quel nom de fichier, du moment qu'il se termine par '.md'."
Le glob le plus général est *
, qui matchera tous les chemins. Vous verrez souvent ce pattern utilisé comme partie d'un autre pattern, par exemple *.bak
et temp*
.
Nushell prend également en charge une double *
, qui traversera les chemins imbriqués dans d'autres répertoires. Par exemple, ls **/*
listera tous les chemins non cachés sous le répertoire courant.
ls **/*.md
╭───┬───────────────────────────────┬──────┬──────────┬──────────────╮
│ # │ name │ type │ size │ modified │
├───┼───────────────────────────────┼──────┼──────────┼──────────────┤
│ 0 │ CODE_OF_CONDUCT.md │ file │ 3.4 KiB │ 5 months ago │
│ 1 │ CONTRIBUTING.md │ file │ 11.0 KiB │ a month ago │
│ 2 │ README.md │ file │ 12.0 KiB │ a month ago │
│ 3 │ SECURITY.md │ file │ 2.6 KiB │ 5 hours ago │
│ 4 │ benches/README.md │ file │ 249 B │ 2 months ago │
│ 5 │ crates/README.md │ file │ 795 B │ 5 months ago │
│ 6 │ crates/nu-cli/README.md │ file │ 388 B │ 5 hours ago │
│ 7 │ crates/nu-cmd-base/README.md │ file │ 262 B │ 5 hours ago │
│ 8 │ crates/nu-cmd-extra/README.md │ file │ 669 B │ 2 months ago │
│ 9 │ crates/nu-cmd-lang/README.md │ file │ 1.5 KiB │ a month ago │
╰───┴───────────────────────────────┴──────┴──────────┴──────────────╯
Ici, nous cherchons tout fichier se terminant par ".md". Les doubles astérisques spécifient en outre "dans n'importe quel répertoire à partir d'ici".
La syntaxe de globbing de Nushell prend non seulement en charge *
, mais aussi les matching de caractères uniques avec ?
et les groupes de caractères avec [...]
.
Pour échapper les patterns *
, ?
, et []
, on les entoure de guillemets simples, doubles ou string raw. Par exemple, pour afficher le contenu d'un répertoire nommé [slug]
, utilisez ls "[slug]"
ou ls '[slug]'
.
Cependant, les chaînes entre backtick ne permettent pas d'échapper les globs. Comparez les scénarios suivants :
Sans guillemets : pattern de Glob
Une chaîne contenant des simples mots sans guillemets contenent des caractères glob est interprétée comme un pattern de glob. Par exemple, la commande suivante supprimera tous les fichiers dans le répertoire courant contenant
myfile
dans leur nom :rm *myfile*
Avec guillemets : chaine literal avec astérisques
Avec des guillemets simples et ou doubles, ou en utilisant des strings raw, une string littérale, avec les astérisques (ou tout autre catactère de glob) échappés, est passée à la commande. Le résultat n'est pas un glob. La commande suivante va seulement supprimer un fichier littéralement nommé
*myfile*
(astérisques inclus). D'autres fichiers avecmyfile
dans leur nom ne seront pas affectés :rm "*myfile*"
Entre backticks : pattern de Glob
Les astérisques (et autre patterns de glob) à l'intérieur d'une string entre backticks sont interprétés comme pattern de glob. Notez que le comportement est le même que dans l'exemple d'une chaîne sans guillemets, #1 ci-dessus.
La suivante, comme dans le premier exemple, supprime tous les fichiers contenant
myfile
dans leur nom dans le répertoire actuel .rm `*myfile*`
Conseil
Nushell inclue également une commande glob
dédiée, qui prend en charge des scénarios de globbing plus complexes.
Conversion de Chaînes en Globs
Les techniques utilisant des guillemets ci-dessus sont utiles pour construire des globs littéraux, mais vous pourriez avoir besoin de construire des globs de mamière programmable. Voici quelques techniques pour faire cela :
into glob
La commande
into glob
peut être utilisée pour convertir pour convertir une chaine (ou d'autres types) en glob. Par exemple :# Find files whose name includes the current month in the form YYYY-mm let current_month = (date now | format date '%Y-%m') let glob_pattern = ($"*($current_month)*" | into glob) ls $glob_pattern
L'opérateur de propagation combiné avec la commande
glob
:La commande
glob
(note : différente deinto glob
) produit uneliste
de noms de fichiers qui matchent le pattern de glob. Cette liste peut être étendue et passée aux commandes du système de fichiers en utilisant l'opérateur de propagation :# Find files whose name includes the current month in the form YYYY-mm let current_month = (date now | format date '%Y-%m') ls ...(glob $"*($current_month)*")
Forcer le type de
glob
via des annotations :# Find files whose name includes the current month in the form YYYY-mm let current_month = (date now | format date '%Y-%m') let glob_pattern: glob = ($"*($current_month)*") ls $glob_pattern
Changer le Répertoire Courant
> cd new_directory
Pour changer du répertoire courant vers un nouveau, utilisez la commande cd
.
Changer le répertoire courant peut également être effectué si cd
est ommis et seul un chemin est fourni :
> ./new_directory
Exactement comme dans d'autres shells, vous pouvez utiliser le nom d'un répertoire, ou si vous voulez remonter d'un répertoire, vous pouvez utiliser le raccourcis ..
.
Vous pouvez ajouter des points supplémentaires pour remonter de niveaux supplémentaires :
# Change to the parent directory
> cd ..
# or
> ..
# Go up two levels (parent's parent)
> cd ...
# or
> ...
# Go up three levels (parent of parent's parent)
> cd ....
# Etc.
Conseil
Les raccourcis multi-points sont disponibles à la fois pour les commandes Nushelles, les commandes du système de fichier et les commandes externes. Par exemple, executer ^stat ....
sur un système Linux/Unix affichera que le chemin est étendu à ../../../..
Vous pouvez aussi combiner des niveaux de répertoires relatifs avec des noms de répertoires :
> cd ../sibling
CONSEIL IMPORTANT
Changer le répertoire courant avec cd
change aussi la variable d'environnement PWD
. Cela signifie que le changement de répertoire est restreint au scope actuel (par ex. bloc ou closure). Une fois que vous êtes sortis de ce bloc, vous allez retourner au répertoire précédent. Vous pouvez en apprendre plus au chapitre Environnement.
Commandes de Système de Fichiers
Nu met également à disposition des commandes basiques de système de fichiers qui fonctionnent sur toutes les plateformes, telles que :
mv
pour renommer ou déplacer un fichier ou répertoire vers un nouvel emplacementcp
pour copier un élément vers un nouvel emplacementrm
pour supprimer des éléments du système de fichiermkdir
pour créer un nouveau répertoire
NOTE
Sous Bash et de nombreux autres shells, la plupart des commandes de système de fichiers (excepté cd
) sont en fait des binaires séparés dans le système. Par exemple, sur un système Linux, cp
est le binaire /usr/bin/cp
. Dans Nushell, ces commandes sont intégrées. Cela a plusieurs avantages :
- Elles fonctionnent de manière cohérente sur les platefoems où une version binaire n'est peut-être pas disponible (par ex. Windows). Cela permet la création de scripts, modules ou commandes personnalisées cross-platform.
- Elles sont intégrées plus étroitement avec Nushell, leur donnant la possibilité de comprendres les types et constructions de Nushell
- Comme mentionné dans le Rapide Tour d'Horizon, elles sont documentées dans le système d'aide de Nushell. Executer
help <command>
ou<command> --help
affichera la documentation Nushell pour ces commandes.
Bien que l'utilisation des versions intégrées à Nushell soit typiquement recommandé, il est possible d'accéder aux binaires Linux. Lisez S'échapper vers le système pour les détails.