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
lsComme 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
myfiledans 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 avecmyfiledans 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
myfiledans 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 globLa commande
into globpeut ê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_patternL'opérateur de propagation combiné avec la commande
glob:La commande
glob(note : différente deinto glob) produit unelistede 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
globvia 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_directoryPour 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_directoryExactement 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 ../siblingCONSEIL 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 :
mvpour renommer ou déplacer un fichier ou répertoire vers un nouvel emplacementcppour copier un élément vers un nouvel emplacementrmpour supprimer des éléments du système de fichiermkdirpour 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> --helpaffichera 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.