Travailler avec des fichiers et des répertoires
Aperçu
Enseignement: 30 min
Exercices: 20 minQuestions
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é thesis
en 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.
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 quenorth pacific gyre/
).Ne commencez pas le nom par
-
(tiret).Les commandestraitent les noms commençant par
-
comme des options.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 ‘
nano
est 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 quenano
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
).
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 utiliserControl-G
pour obtenir de l’aide etControl-O
pour enregistrer votre fichier.
nano
ne 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
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?Utilisez
ls -l
pour inspecter les fichiers. Quelle est la taille demy_file.txt
?Quand voulez-vous créer un fichier de cette façon?
Solution
La commande
touch
génère un nouveau fichier appelémy_file.txt
dans votre répertoire courant. Vous pouvez observer ce fichier nouvellement généré en tapantls
à l’invite de ligne de commande.my_file.txt
peut également être consulté dans l’explorateur de fichiers yourGUI.Lorsque vous inspectez le fichier avec
ls -l
, notez que la taille demy_file.txt
est de 0 octet. En d’autres termes, il ne contient aucune donnée.Si vous ouvrezmy_file.txt
à l’aide de votre éditeur de texte, il est vide.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 fichiermythesis
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,.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.mp3
ne 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
etmaltose.dat
dans le mauvais dossier. Les fichiers doivent avoir été placés dans le dossierraw
.$ 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?
cp statstics.txt statistics.txt
mv statstics.txt statistics.txt
mv statstics.txt .
cp statstics.txt .
Solution
- 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é.
- Oui, cela fonctionnerait pour renommer le fichier.
- 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.
- 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
proteins-saved.dat recombined
recombined
proteins.dat recombined
proteins-saved.dat
Solution
We start in the
/Users/jamie/data
directory, and create a new folder calledrecombined
.La deuxième ligne déplace (mv
) le fichierproteins.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é.
- Non, voir l’explication ci-dessus.
proteins-saved.dat
se trouve à/Users/jamie
- Oui
- Non, voir l’explication ci-dessus.
proteins.dat
se trouve à/Users/jamie/data/recombined
- 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 derm
?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.
rm
peut 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 thedata-shell/molecules
directory:*.pdb
matchesethane.pdb
propane.pdb
, and everyfile that ends with ‘.pdb’. D’autre part,p*.pdb
ne correspond qu’àpentane.pdb
etpropane.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
etmethane.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 deane.pdb
, ce qui donnecubane.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épertoiremolecules
(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éwc
etls
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
, quils
commande(s) produira-t-il cette sortie?
ethane.pdb methane.pdb
ls *t*ane.pdb
ls *t?ne.*
ls *t??ne.pdb
ls ethane.*
Solution
The solution is
shows all files whose names contain zero or more characters (
*
) followed by the lettert
, then zero or more characters (*
) followed byane.pdb
. Cela donneethane.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 lettret
, puis un seul caractère (?
), puist
ne.
suivi de zéro caractère ou plus (*
). Cela nous donneraoctane.pdb
etpentane.pdb
mais ne correspond à rien qui se termine parthane.pdb
.
corrige les problèmes de l’option 2 en faisant correspondre deux caractères (
??
) entret
etne
. 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
andsucrose.dat
to theanalyzed
directory.The shell will expand *.dat to match all .dat files in the current directory.Themv
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ésraw
etprocessed
qui contiennent des fichiers de données. Le but est de copier la structure de dossier du dossier2016-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îneramkdir
à 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 pasany.txt
.L’utilisation de la touche de contrôle peut être décrite de nombreuses manières, y compris
Ctrl-X
Control-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.
Leave a Reply