Articles

Travailler avec des fichiers et des répertoires

Aperçu

Enseignement: 30 min
Exercices: 20 min
Questions

  • Comment puis-je créer, copier et supprimer des fichiers et des répertoires ?

  • Comment puis-je modifier des fichiers?

Objectifs

  • Créez une hiérarchie de répertoires qui correspond à un diagramme donné.

  • Créez des fichiers dans cette hiérarchie à l’aide d’un éditeur ou en copiant et renommant des fichiers existants.

  • Supprimez, copiez et déplacez les fichiers et/ou répertoires spécifiés.

Création de répertoires

Nous savons maintenant comment explorer les fichiers et les répertoires, mais comment les créer en premier lieu?

Première étape: voyez où nous en sommes et ce que nous avons déjà

Revenons à notre répertoire data-shell sur le bureau et utilisons ls -F pour voir ce qu’il contient:

$ pwd
/Users/nelle/Desktop/data-shell
$ ls -F
creatures/ data/ molecules/ north-pacific-gyre/ notes.txt pizza.cfg solar.pdf writing/

Créer un répertoire

Créons un nouveau répertoire appelé thesisen utilisant la commande mkdir thesis (qui n’a pas de sortie):

mkdir thesis(qui n’a pas de sortie):

$ mkdir thesis

Comme vous pouvez le deviner d’après son nom, mkdir signifie ‘répertoire de marque’.Puisque thesis est le chemin relatif (c’est-à-dire, n’a pas de barre oblique principale, comme /what/ever/thesis), le nouveau répertoire est créé dans le répertoire de travail actuel :

$ ls -F
creatures/ data/ molecules/ north-pacific-gyre/ notes.txt pizza.cfg solar.pdf thesis/ writing/
creatures/ data/ molecules/ north-pacific-gyre/ notes.txt pizza.cfg solar.pdf thesis/ writing/

Puisque nous venons de créer le répertoire thesis, il n’y a encore rien dedans:

$ ls -F thesis

Notez que mkdir ne se limite pas à créer des répertoires uniques un à la fois. L’option -p permet à mkdir de créer un répertoire avec un nombre quelconque de sous-répertoires imbriqués en une seule opération :

$ mkdir -p thesis/chapter_1/section_1/subsection_1

Le de la commande ls listera tous les sous-répertoires imbriqués dans un répertoire. Utilisons ls -FR pour lister récursivement la nouvelle hiérarchie de répertoires que nous venons de créer sous le répertoire thesis:

$ ls -FR thesischapter_1/thesis/chapter_1:section_1/thesis/chapter_1/section_1:subsection_1/thesis/chapter_1/section_1/subsection_1:

Deux façons de faire la même chose

Utiliser le shell pour créer un répertoire n’est pas différent de l’utilisation d’un explorateur de fichiers.Si vous ouvrez le répertoire courant à l’aide de l’explorateur de fichiers graphique de votre système d’exploitation, le répertoire thesis apparaîtra également.Alors que le shell et l’explorateur de fichiers sont deux façons différentes d’interagir avec les fichiers, les fichiers et les répertoires eux-mêmes sont les mêmes.

De bons noms pour les fichiers et les répertoires

Des noms compliqués de fichiers et de répertoires peuvent vous rendre la vie pénible lorsque vous travaillez sur la ligne de commande. Nous fournissons ici quelques conseils utiles pour les noms de vos fichiers.

  1. N’utilisez pas d’espaces.

    Les espaces peuvent rendre un nom plus significatif, mais comme les espaces sont utilisés pour séparer les arguments sur la ligne de commande, il est préférable de les éviter dans les noms de fichiers et de répertoires.Vous pouvez utiliser - ou _ à la place (par ex. north-pacific-gyre/ plutôt que north pacific gyre/).

  2. Ne commencez pas le nom par - (tiret).Les commandes

    traitent les noms commençant par - comme des options.

  3. Collez avec des lettres, des chiffres, . (point ou ‘point complet’), - (tiret) et _ (trait de soulignement).

    De nombreux autres caractères ont des significations particulières sur la ligne de commande.Nous en apprendrons quelques-uns au cours de cette leçon.Il existe des caractères spéciaux qui peuvent empêcher votre commande de fonctionner comme prévu et même entraîner une perte de données.

Si vous devez vous référer aux noms de fichiers ou de répertoires qui ont des espaces ou d’autres caractères spéciaux, vous devez entourer le nom entre guillemets ("").

Créez un fichier texte

Changeons notre répertoire de travail en thesis en utilisant cd, puis exécutez un éditeur de texte appelé Nano pour créer un fichier appelé draft.txt div>:

$ cd thesis$ nano draft.txt

Quel éditeur ?

Lorsque nous disons ‘nanoest un éditeur de texte’, nous voulons vraiment dire ‘texte’: il fonctionne uniquement avec des données de caractères simples, pas avec des tableaux, des images ou tout autre support adapté aux humains. Nous l’utilisons dans des exemples car c’est l’un desles derniers éditeurs de texte complexes. Cependant, en raison de ce trait, il peut ne pas être assez puissant ou assez flexible pour le travail que vous devez faire après cet atelier. Sur les systèmes Unix (tels que Linux et macOS), de nombreux programmeurs utilisent Emacs orVim (qui nécessitent tous deux plus de temps pour apprendre), ou un éditeur graphique tel Quegedit. Sous Windows, vous souhaiterez peut-êtreutiliser Notepad++. Windows a également un éditeur intégré appelé notepad qui peut être exécuté à partir de la ligne de commande dans le même chemin que nano pour les besoins de cette leçon.

Quel que soit l’éditeur que vous utilisez, vous devrez savoir où il recherche et enregistre les fichiers. Si vous le démarrez à partir du shell, il utilisera (probablement) votre répertoire de travail actuel comme emplacement par défaut. Si vous utilisez le menu démarrer de votre ordinateur, il peut vouloir enregistrer des fichiers dans le répertoire ordocuments de votre bureau à la place. Vous pouvez changer cela en naviguant vers un autre répertoire la première fois que vous enregistrez sous…

Tapons quelques lignes de texte.Une fois que nous sommes satisfaits de notre texte, nous pouvons appuyer sur Ctrl + O (appuyez sur la touche Ctrl ou Control et, en la maintenant enfoncée, appuyez sur la touche O) pour écrire nos données sur le disque (on nous demandera dans quel fichier nous voulons enregistrer ceci: appuyez sur Retour pour accepter la valeur par défaut suggérée de draft.txt).

capture d'écran de l'éditeur de texte nano en action

Une fois notre fichier enregistré, nous pouvons utiliser Ctrl + X pour quitter l’éditeur et retourner au shell.

Touche de contrôle, Ctrl ou ^

La touche de contrôle est également appelée touche ‘Ctrl’. Il existe différentes manièresdans lequel l’utilisation de la touche de contrôle peut être décrite. Par exemple, vous pouvez voir une instruction pour appuyer sur la touche Control et, tout en la maintenant enfoncée, appuyer sur la touche X, décrite comme l’une des:

  • Control-X
  • Control+X
  • Ctrl-X
  • Ctrl+X
  • ^X
  • C-x

Dans nano, en bas de l’écran, vous verrez ^G Get Help ^O WriteOut.Cela signifie que vous pouvez utiliser Control-G pour obtenir de l’aide et Control-O pour enregistrer votre fichier.

nanone laisse aucune sortie à l’écran après sa sortie, mais ls montre maintenant que nous avons créé un fichier appelé draft.txt:

draft.txt:

$ ls

draft.txt

Créer des fichiers d’une manière différente

Nous avons vu comment créer des fichiers texte en utilisant l’éditeur nano.Maintenant, essayez la commande suivante:

$ touch my_file.txt
  1. Qu’a fait la commande touch ?Lorsque vous regardez votre répertoire actuel à l’aide de l’explorateur de fichiers GUI, le fichier apparaît-il?

  2. Utilisez ls -l pour inspecter les fichiers. Quelle est la taille de my_file.txt?

  3. Quand voulez-vous créer un fichier de cette façon?

Solution

  1. La commande touch génère un nouveau fichier appelé my_file.txtdans votre répertoire courant. Vous pouvez observer ce fichier nouvellement généré en tapant ls à l’invite de ligne de commande. my_file.txt peut également être consulté dans l’explorateur de fichiers yourGUI.

  2. Lorsque vous inspectez le fichier avec ls -l, notez que la taille de my_file.txt est de 0 octet. En d’autres termes, il ne contient aucune donnée.Si vous ouvrez my_file.txt à l’aide de votre éditeur de texte, il est vide.

  3. Certains programmes ne génèrent pas eux-mêmes de fichiers de sortie, mais exigent au lieu de cela que des fichiers vides aient déjà été générés.Lorsque le programme est exécuté, il recherche un fichier existant topopuler avec sa sortie. La commande tactile vous permet de générer efficacement un fichier texte vierge à utiliser par de tels programmes.

Qu’y a-t-il Dans Un Nom ?

Vous avez peut-être remarqué que tous les fichiers de Nelle sont nommés ‘quelque chose de quelque chose’, et dans cette partie de la leçon, nous avons toujours utilisé l’extension .txt. Ce n’est qu’une convention: nous pouvons appeler un fichier mythesis ou presque tout ce que nous voulons. Cependant, la plupart des gens utilisent des noms en deux parties la plupart du temps pour les aider (et leurs programmes) à distinguer différents types de fichiers. La deuxième partie d’un tel nom s’appelle l’extension de nom de fichier, et indique quel type de données contient le fichier: .txt signale un fichier texte brut, .pdf indique un document PDF, .cfg est un fichier de configuration plein de paramètres pour un programme ou un autre, .png est une image PNG, et ainsi de suite.

Ce n’est qu’une convention, bien qu’importante. Les fichiers contiennent des octets: c’est à nous et à nos programmes d’interpréter ces octets en fonction des règles pour les fichiers texte brut, les documents PDF, les fichiers de configuration, les images, etc.

Nommer une image PNG d’une baleine comme whale.mp3ne la transforme pas de manière magique en un enregistrement de chant de baleine, bien que cela puisse inciter le système d’exploitation à essayer de l’ouvrir avec un lecteur de musique lorsque quelqu’un double-clique dessus.

Déplacement de fichiers et de répertoires

Retour au data-shell répertoire,

cd ~/Desktop/data-shell/

Dans notre thesis répertoire nous avons un fichier draft.txt qui n’est pas un nom particulièrement informatif, alors changeons le nom du fichier en utilisant mv, qui est l’abréviation de ‘move’:

$ mv thesis/draft.txt thesis/quotes.txt

Le premier argument indique à mv ce que nous « déplaçons », tandis que le second indique où il doit aller.Dans ce cas, nous déplaçons thesis/draft.txt vers thesis/quotes.txt, ce qui a le même effet que de renommer le fichier.Bien sûr, ls nous montre que thesis contient maintenant un fichier appelé quotes.txt:

$ ls thesis

quotes.txt

Il faut être prudent lors de la spécification du nom de fichier cible, car mv écrasera tout fichier existant portant le même nom, ce qui pourrait entraîner une perte de données. Une option supplémentaire, mv -i (ou mv --interactive), peut être utilisée pour que mv vous demande une confirmation avant d’écraser.

Notez que mv fonctionne également sur les répertoires.

Déplaçons quotes.txt dans le répertoire de travail actuel.Nous utilisons à nouveau mv, mais cette fois, nous utiliserons uniquement le nom d’un répertoire comme deuxième argumentpour dire à mv que nous voulons conserver le nom du fichier, mais placer le fichier quelque part de nouveau.(C’est pourquoi la commande s’appelle ‘move’.) Dans ce cas, le nom de répertoire que nous utilisons est le nom de répertoire spécial . que nous avons mentionné précédemment.

$ mv thesis/quotes.txt .

L’effet est de déplacer le fichier du répertoire dans lequel il se trouvait vers le répertoire de travail actuel.ls nous montre maintenant que thesis est vide :

$ ls thesis

En outre, ls avec un nom de fichier ou un nom de répertoire en argument répertorie uniquement ce fichier ou ce répertoire.Nous pouvons l’utiliser pour voir que quotes.txt est toujours dans notre répertoire actuel:

$ ls quotes.txt
quotes.txt
quotes.txt

Déplacement des fichiers vers un nouveau dossier

Après avoir exécuté les commandes suivantes, Jamie se rend compte qu’elle a placé les fichiers sucrose.dat et maltose.dat dans le mauvais dossier. Les fichiers doivent avoir été placés dans le dossier raw.

$ ls -F analyzed/ raw/$ ls -F analyzedfructose.dat glucose.dat maltose.dat sucrose.dat$ cd analyzed

Remplissez les blancs pour déplacer ces fichiers dans le dossier raw/ (c’est-à-dire celui dans lequel elle a oublié de les mettre)

$ mv sucrose.dat maltose.dat ____/____

Solution

$ mv sucrose.dat maltose.dat ../raw

Rappelez-vous que .. fait référence au répertoire parent (c’est-à-dire un au-dessus du répertoire courant) et que . fait référence au répertoire courant.

Copie de fichiers et de répertoires

La commande cp fonctionne très bien comme mv, sauf qu’elle copie un fichier au lieu de le déplacer.Nous pouvons vérifier qu’il a bien fait en utilisant ls avec deux chemins comme arguments — comme la plupart des commandes Unix, ls peut recevoir plusieurs chemins à la fois:

$ cp quotes.txt thesis/quotations.txt$ ls quotes.txt thesis/quotations.txt
quotes.txt thesis/quotations.txt

Nous pouvons également copier un répertoire et tout son contenu en utilisant l’option de calcul -r, par exemple pour sauvegarder un répertoire :

$ cp -r thesis thesis_backup

Nous pouvons vérifier le résultat en listant le contenu du répertoire thesis et thesis_backup:

$ ls thesis thesis_backup
thesis:quotations.txtthesis_backup:quotations.txt

Renommer des fichiers

Supposons que vous créé un fichier en texte brut dans votre répertoire actuel pour contenir une liste des tests statistiques que vous devrez faire pour analyser vos données, et nommé: statstics.txt

Après avoir créé et enregistré ce fichier, vous réalisez que vous avez mal orthographié le nom du fichier! Vous voulez corriger l’erreur, laquelle des commandes suivantes pourriez-vous utiliser pour le faire?

  1. cp statstics.txt statistics.txt
  2. mv statstics.txt statistics.txt
  3. mv statstics.txt .
  4. cp statstics.txt .

Solution

  1. Non. Bien que cela créerait un fichier avec le nom correct, le fichier mal nommé existe toujours dans la direction et devrait être supprimé.
  2. Oui, cela fonctionnerait pour renommer le fichier.
  3. Non, la période (.) indique où déplacer le fichier, mais ne fournit pas de nouveau nom de fichier ; des noms de fichier identiques ne peuvent pas être créés.
  4. Non, la période (.) indique où copier le fichier, mais ne fournit pas de nouveau nom de fichier; des noms de fichier identiques ne peuvent pas être créés.

Déplacement et copie

Quelle est la sortie de la commande de fermeture ls dans l’ordre indiqué ci-dessous ?

$ pwd
/Users/jamie/data
$ ls
proteins.dat
$ mkdir recombined$ mv proteins.dat recombined/$ cp recombined/proteins.dat ../proteins-saved.dat$ ls
  1. proteins-saved.dat recombined
  2. recombined
  3. proteins.dat recombined
  4. proteins-saved.dat

Solution

We start in the /Users/jamie/data directory, and create a new folder called recombined.La deuxième ligne déplace (mv) le fichier proteins.dat vers le nouveau dossier (recombined).La troisième ligne fait une copie du fichier que nous venons de déplacer. La partie délicate ici est l’endroit où le fichier a été copié. Rappelons que .. signifie ‘monter d’un niveau’, donc le fichier copié est maintenant dans /Users/jamie.Notez que .. est interprété par rapport au répertoire de travail en cours, et non par rapport à l’emplacement du fichier copié.Ainsi, la seule chose qui apparaîtra en utilisant ls (dans /Users/jamie/data) est le dossier recombiné.

  1. Non, voir l’explication ci-dessus. proteins-saved.dat se trouve à /Users/jamie
  2. Oui
  3. Non, voir l’explication ci-dessus. proteins.dat se trouve à /Users/jamie/data/recombined
  4. Non, voir l’explication ci-dessus. proteins-saved.dat est situé à /Users/jamie

Suppression de fichiers et de répertoires

Retour à la data-shell répertoire, rangeons ce répertoire en supprimant le fichier quotes.txt que nous avons créé.La commande Unix que nous utiliserons pour cela est rm (abréviation de ‘remove’):

$ rm quotes.txt

Nous pouvons confirmer que le fichier est parti en utilisant ls:

$ ls quotes.txt
ls: cannot access 'quotes.txt': No such file or directory

La Suppression Est Pour Toujours

Le shell Unix n’a pas de corbeille à partir de laquelle nous pouvons récupérer des fichiers supprimés (bien que la plupart des interfaces graphiques vers Unix le fassent). Au lieu de cela, lorsque nous supprimons des fichiers, ils sont dissociés du système de fichiers afin queleur espace de stockage sur le disque peut être recyclé. Des outils pour trouver et récupérer des fichiers supprimés existent, mais rien ne garantit qu’ils fonctionneront dans une situation particulière, car l’ordinateur peut recycler immédiatement l’espace disque du fichier.

Utiliser rm en toute sécurité

Que se passe-t-il lorsque nous exécutons rm -i thesis_backup/quotations.txt?Pourquoi voudrions-nous cette protection lors de l’utilisation de rm?

Solution

$ rm: remove regular file 'thesis_backup/quotations.txt'? y

L’option -i vous demandera avant (chaque) suppression (utilisez Y pour confirmer la suppression ou N pour conserver le fichier) .Le shell Unix n’a pas de corbeille, donc tous les fichiers supprimés disparaîtront forever.By en utilisant l’option -i, nous avons la possibilité de vérifier que nous supprimons uniquement les fichiers que nous voulons supprimer.

Si nous essayons de supprimer le répertoire thesis en utilisant rm thesis, nous obtenons un message d’erreur:

$ rm thesis

rm: cannot remove `thesis': Is a directory

Cela se produit parce que rm par défaut ne fonctionne que sur les fichiers, pas sur les répertoires.

rmpeut supprimer un répertoire et tout son contenu si nous utilisons l’option -r, et cela se fera sans invite de confirmation:

$ rm -r thesis

Étant donné qu’il n’existe aucun moyen de récupérer des fichiers supprimés à l’aide du shell, rm -r doit être utilisé avec une grande prudence (vous pourriez envisager d’ajouter l’option interactive rm -r -i).

Opérations avec plusieurs fichiers et répertoires

Souvent, il faut copier ou déplacer plusieurs fichiers à la fois. Cela peut être fait en fournissant une liste de noms de fichiers individuels ou en spécifiant un modèle de nommage à l’aide de caractères génériques.

Copier avec plusieurs noms de fichiers

Pour cet exercice, vous pouvez tester les commandes dans le répertoire data-shell/data.

Dans l’exemple ci-dessous, que fait cp lorsqu’on lui donne plusieurs noms de fichiers et un nom de répertoire ?

$ mkdir backup$ cp amino-acids.txt animals.txt backup/

Dans l’exemple ci-dessous, que fait cp lorsqu’on lui donne trois noms de fichiers ou plus ?

$ ls -F
amino-acids.txt animals.txt backup/ elements/ morse.txt pdb/ planets.txt salmon.txt sunspot.txt
$ cp amino-acids.txt animals.txt morse.txt

Solution

Si on lui donne plus d’un nom de fichier suivi d’un nom de répertoire (c’est-à-dire que le répertoire de destination doit être le dernier argument), cp copie les fichiers dans le répertoire nommé.

Si on lui donne trois noms de fichiers, cp génère une erreur telle que celle ci-dessous, car elle attend un directoryname comme dernier argument.

cp: target ‘morse.txt’ is not a directory

Using wildcards for accessing multiple files at once

Wildcards

* is a wildcard, which matches zero or more characters.Let’s consider the data-shell/molecules directory:*.pdb matches ethane.pdbpropane.pdb, and everyfile that ends with ‘.pdb’. D’autre part, p*.pdb ne correspond qu’à pentane.pdb et propane.pdb, car le ‘p’ à l’avant ne correspond qu’aux noms de fichiers commençant par la lettre ‘p’.

? est également un caractère générique, mais il correspond exactement à un character.So ?ethane.pdb correspondrait à methane.pdb alors que *ethane.pdb correspond à la fois à ethane.pdb et methane.pdb.

Les caractères génériques peuvent être utilisés en combinaison les uns avec les autres.g. ???ane.pdb correspond à trois caractères suivis de ane.pdb, ce qui donne cubane.pdb ethane.pdb octane.pdb.

Lorsque le shell voit un caractère générique, il le développe pour créer une liste de noms de fichiers correspondants avant d’exécuter la commande demandée. Par exception, si une expression générique ne correspond à aucun fichier, Bash transmettra l’expression en argument à la commande telle qu’elle l’est. Par exemple, taper ls *.pdf dans le répertoire molecules (qui ne contient que des fichiers dont les noms se terminent par .pdb) entraîne un message d’erreur indiquant qu’il n’y a pas de fichier appelé *.pdf.Cependant, généralement des commandes comme wc et ls voient les listes des noms de fichiers correspondant à ces expressions, mais pas les wildcards eux-mêmes. C’est le shell, pas les autres programmes, qui traite del’extension des caractères génériques, et c’est un autre exemple de conception orthogonale.

Liste les noms de fichiers correspondant à un motif

Lorsqu’ils sont exécutés dans le répertoire molecules, qui ls commande(s) produira-t-il cette sortie?

ethane.pdb methane.pdb

  1. ls *t*ane.pdb
  2. ls *t?ne.*
  3. ls *t??ne.pdb
  4. ls ethane.*

Solution

The solution is

shows all files whose names contain zero or more characters (*) followed by the letter t, then zero or more characters (*) followed by ane.pdb. Cela donne ethane.pdb methane.pdb octane.pdb pentane.pdb.

affiche tous les fichiers dont les noms commencent par zéro caractère ou plus (*) suivi de la lettre t, puis un seul caractère (?), puis tne. suivi de zéro caractère ou plus (*). Cela nous donnera octane.pdb et pentane.pdb mais ne correspond à rien qui se termine par thane.pdb.

corrige les problèmes de l’option 2 en faisant correspondre deux caractères (??) entre t et ne. C’est la solution.

affiche uniquement les fichiers commençant par ethane..

En savoir plus sur les caractères génériques

Sam a un répertoire contenant des données d’étalonnage, des jeux de données et des descriptions des jeux de données:

.├── 2015-10-23-calibration.txt├── 2015-10-23-dataset1.txt├── 2015-10-23-dataset2.txt├── 2015-10-23-dataset_overview.txt├── 2015-10-26-calibration.txt├── 2015-10-26-dataset1.txt├── 2015-10-26-dataset2.txt├── 2015-10-26-dataset_overview.txt├── 2015-11-23-calibration.txt├── 2015-11-23-dataset1.txt├── 2015-11-23-dataset2.txt├── 2015-11-23-dataset_overview.txt├── backup│ ├── calibration│ └── datasets└── send_to_bob ├── all_datasets_created_on_a_23rd └── all_november_files

Avant de partir pour une autre sortie sur le terrain, elle souhaite sauvegarder ses données et envoyer des jeux de données à son collègue Bob. Sam utilise les commandes suivantespour faire le travail:

$ cp *dataset* backup/datasets$ cp ____calibration____ backup/calibration$ cp 2015-____-____ send_to_bob/all_november_files/$ cp ____ send_to_bob/all_datasets_created_on_a_23rd/

Aidez Sam en remplissant les blancs.

La structure de répertoire résultante devrait ressembler à ceci

.├── 2015-10-23-calibration.txt├── 2015-10-23-dataset1.txt├── 2015-10-23-dataset2.txt├── 2015-10-23-dataset_overview.txt├── 2015-10-26-calibration.txt├── 2015-10-26-dataset1.txt├── 2015-10-26-dataset2.txt├── 2015-10-26-dataset_overview.txt├── 2015-11-23-calibration.txt├── 2015-11-23-dataset1.txt├── 2015-11-23-dataset2.txt├── 2015-11-23-dataset_overview.txt├── backup│ ├── calibration│ │ ├── 2015-10-23-calibration.txt│ │ ├── 2015-10-26-calibration.txt│ │ └── 2015-11-23-calibration.txt│ └── datasets│ ├── 2015-10-23-dataset1.txt│ ├── 2015-10-23-dataset2.txt│ ├── 2015-10-23-dataset_overview.txt│ ├── 2015-10-26-dataset1.txt│ ├── 2015-10-26-dataset2.txt│ ├── 2015-10-26-dataset_overview.txt│ ├── 2015-11-23-dataset1.txt│ ├── 2015-11-23-dataset2.txt│ └── 2015-11-23-dataset_overview.txt└── send_to_bob ├── all_datasets_created_on_a_23rd │ ├── 2015-10-23-dataset1.txt │ ├── 2015-10-23-dataset2.txt │ ├── 2015-10-23-dataset_overview.txt │ ├── 2015-11-23-dataset1.txt │ ├── 2015-11-23-dataset2.txt │ └── 2015-11-23-dataset_overview.txt └── all_november_files ├── 2015-11-23-calibration.txt ├── 2015-11-23-dataset1.txt ├── 2015-11-23-dataset2.txt └── 2015-11-23-dataset_overview.txt

Solution

$ cp *calibration.txt backup/calibration$ cp 2015-11-* send_to_bob/all_november_files/$ cp *-23-dataset* send_to_bob/all_datasets_created_on_a_23rd/

Organisation des répertoires et des fichiers

Jamie travaille sur un projet et elle voit que ses fichiers ne sont pas très bien organisés:

$ ls -F
analyzed/ fructose.dat raw/ sucrose.dat

Le fructose.dat et contiennent la sortie de son analyse de données. Quelle(s) commande(s) couverte(s) dans cette leçon doit-elle exécuter pour que les commandes ci-dessous produisent la sortie affichée?

$ ls -F
analyzed/ raw/
$ ls analyzed
fructose.dat sucrose.dat

Solution

mv *.dat analyzed

Jamie needs to move her files fructose.dat and sucrose.dat to the analyzed directory.The shell will expand *.dat to match all .dat files in the current directory.The mv command then moves the list of .fichiers dat dans le répertoire ‘analysé’.

Reproduisez une structure de dossiers

Vous commencez une nouvelle expérience et souhaitez dupliquer la structure de direction de votre expérience précédente afin de pouvoir ajouter de nouvelles données.

Supposons que l’expérience précédente se trouve dans un dossier appelé ‘2016-05-18’, qui contient un dossier data qui contient à son tour des dossiers nommés raw et processed qui contiennent des fichiers de données. Le but est de copier la structure de dossier du dossier 2016-05-18-data dans un dossier appelé 2016-05-20 afin que votre structure de répertoire finale ressemble à ceci :

2016-05-20/└── data ├── processed └── raw

Laquelle des commandes suivantes atteindrait-il cet objectif?Que feraient les autres commandes ?

$ mkdir 2016-05-20$ mkdir 2016-05-20/data$ mkdir 2016-05-20/data/processed$ mkdir 2016-05-20/data/raw
$ mkdir 2016-05-20$ cd 2016-05-20$ mkdir data$ cd data$ mkdir raw processed
$ mkdir 2016-05-20/data/raw$ mkdir 2016-05-20/data/processed
$ mkdir -p 2016-05-20/data/raw$ mkdir -p 2016-05-20/data/processed
$ mkdir 2016-05-20$ cd 2016-05-20$ mkdir data$ mkdir raw processed

Solution

Les deux premiers ensembles de commandes atteignent cet objectif.Le premier ensemble utilise des chemins relatifs pour créer le répertoire de niveau supérieur avant les sous-répertoires.

Le troisième ensemble de commandes donnera une erreur car le comportement par défaut de mkdir ne créera pas de sous-répertoire d’un répertoire inexistant: les dossiers de niveau intermédiaire doivent être créés en premier.

Le quatrième ensemble de commandes atteint cet objectif. N’oubliez pas que l’option -p, suivie d’un chemin d’accès d’un ou plusieurs répertoires, entraînera mkdir à créer des sous-répertoires intermédiaires selon les besoins.

L’ensemble final de commandes génère les répertoires ‘raw’ et ‘processed‘ au même niveau que le répertoire ’data’.

Points clés

  • cp copie un fichier.

  • mkdir crée un nouveau répertoire.

  • mv déplace (renomme) un fichier ou un répertoire.

  • rm supprime (supprime) un fichier.

  • * correspond à zéro caractère ou plus dans un nom de fichier, donc *.txt correspond à tous les fichiers se terminant par .txt.

  • ? correspond à n’importe quel caractère d’un nom de fichier, donc ?.txt correspond à a.txt mais pas any.txt.

  • L’utilisation de la touche de contrôle peut être décrite de nombreuses manières, y compris Ctrl-XControl-X et ^X.

  • Le shell n’a pas de poubelle: une fois que quelque chose est supprimé, il a vraiment disparu.

  • La plupart des noms de fichiers sont something.extension. L’extension n’est pas requise et ne garantit rien, mais est normalement utilisée pour indiquer le type de données dans le fichier.

  • Selon le type de travail que vous effectuez, vous aurez peut-être besoin d’un éditeur de texte plus puissant que Nano.