Arbeiten mit Dateien und Verzeichnissen
Übersicht
Unterricht: 30 min
Übungen: 20 minFragen
Wie kann ich Dateien und Verzeichnisse erstellen, kopieren und löschen?
Wie kann ich Dateien bearbeiten?
Erstellen Sie eine Verzeichnishierarchie, die einem bestimmten Diagramm entspricht.
Erstellen Sie Dateien in dieser Hierarchie mit einem Editor oder durch Kopieren und Umbenennen vorhandener Dateien.
Löschen, kopieren und verschieben Sie bestimmte Dateien und/oder Verzeichnisse.
Verzeichnisse erstellen
Wir wissen jetzt, wie man Dateien und Verzeichnisse untersucht, aber wie erstellen wir sie überhaupt?
Erster Schritt: Sehen Sie, wo wir sind und was wir bereits haben
Gehen wir zurück zu unserem data-shell
Verzeichnis auf dem Desktopund verwenden Sie ls -F
um zu sehen, was es enthält:
$ pwd
/Users/nelle/Desktop/data-shell
$ ls -F
creatures/ data/ molecules/ north-pacific-gyre/ notes.txt pizza.cfg solar.pdf writing/
Erstellen Sie ein Verzeichnis
Erstellen wir ein neues Verzeichnis mit dem Namen thesis
mit dem Befehl mkdir thesis
(das keine Ausgabe hat):
$ mkdir thesis
Wie Sie dem Namen entnehmen können, bedeutetmkdir
„Verzeichnis markieren“.Da thesis
der relative Pfad ist(dh., hat keinen führenden Schrägstrich, wie /what/ever/thesis
),wird das neue Verzeichnis im aktuellen Arbeitsverzeichnis erstellt:
$ ls -F
creatures/ data/ molecules/ north-pacific-gyre/ notes.txt pizza.cfg solar.pdf thesis/ writing/
Da wir gerade das neue Verzeichnis erstellt haben thesis
Verzeichnis, es ist noch nichts drin:
$ ls -F thesis
Beachten Sie, dass mkdir
nicht darauf beschränkt ist, einzelne Verzeichnisse einzeln zu erstellen. Mit der Option -p
können Sie mit mkdir
ein Verzeichnis mit einer beliebigen Anzahl verschachtelter Unterverzeichnisse in einem einzigen Vorgang erstellen:
$ mkdir -p thesis/chapter_1/section_1/subsection_1
Mit der Option -R
der Befehl ls
listet alle verschachtelten Unterverzeichnisse in einem Verzeichnis auf. Verwenden wir ls -FR
, um die neue Verzeichnishierarchie, die wir gerade erstellt haben, rekursiv unter dem thesis
Verzeichnis aufzulisten:
$ ls -FR thesischapter_1/thesis/chapter_1:section_1/thesis/chapter_1/section_1:subsection_1/thesis/chapter_1/section_1/subsection_1:
Zwei Möglichkeiten, dasselbe zu tun
Die Shell zum Erstellen eines Verzeichnisses zu verwenden, unterscheidet sich nicht von der Verwendung eines Datei-Explorers.Wenn Sie das aktuelle Verzeichnis mit dem grafischen Datei-Explorer Ihres Betriebssystems öffnen, wird dort auch das Verzeichnis
thesis
angezeigt.Während die Shell und der Datei-Explorer zwei verschiedene Arten der Interaktion mit den Dateien sind, sind die Dateien und Verzeichnisse selbst gleich.
Gute Namen für Dateien und Verzeichnisse
Komplizierte Namen von Dateien und Verzeichnissen können Ihnen das Leben schmerzlich machenbei der Arbeit an der Befehlszeile. Hier stellen wir ein paar nützliche zur Verfügungtipps für die Namen Ihrer Dateien.
Verwenden Sie keine Leerzeichen.
Leerzeichen können einen Namen aussagekräftiger machen,aber da Leerzeichen verwendet werden, um Argumente in der Befehlszeile zu trennenes ist besser, sie in Namen von Dateien und Verzeichnissen zu vermeiden.Sie können stattdessen
-
oder_
verwenden (z.north-pacific-gyre/
stattnorth pacific gyre/
).Beginnen Sie den Namen nicht mit
-
(Bindestrich).Befehle behandeln Namen, die mit
-
beginnen, als Optionen.Bleiben Sie bei Buchstaben, Zahlen,
.
(Punkt oder „Punkt“),-
(Bindestrich) und_
(Unterstrich).Viele andere Zeichen haben in der Befehlszeile eine besondere Bedeutung.Einige davon werden wir in dieser Lektion lernen.Es gibt Sonderzeichen, die dazu führen können, dass Ihr Befehl nicht wie erwartet funktioniert und sogar zu Datenverlust führen kann.
Wenn Sie auf Namen von Dateien oder Verzeichnissen verweisen müssen, die Leerzeichen oder andere Sonderzeichen enthalten, sollten Sie den Namen in Anführungszeichen setzen (
""
).
Erstellen Sie eine Textdatei
Ändern wir unser Arbeitsverzeichnis in thesis
Verwenden Sie cd
und führen Sie dann einen Texteditor namens Nano aus, um eine Datei mit dem Namen draft.txt
:
$ cd thesis$ nano draft.txt
Welcher Editor?
Wenn wir sagen, ‚
nano
ist ein Texteditor‘ meinen wir wirklich ‚Text‘: Es kann nur mit einfachen Zeichendaten arbeiten, nicht mit Tabellen, Bildern oder anderen menschenfreundlichen Medien. Wir verwenden es in Beispielen, weil es eines der istletzte komplexe Texteditoren. Aufgrund dieser Eigenschaft ist es jedoch möglicherweise nicht leistungsfähig genug oder flexibel genug für die Arbeit, die Sie nach diesem Workshop erledigen müssen. Auf Unix-Systemen (wie Linux und macOS)verwenden viele Programmierer Emacs odervim (beide benötigen mehr Zeit zum Lernen)oder einen grafischen Editor wiegedit. Unter Windows können Sie dies wünschenverwenden Sie Notepad ++. Windows hat auch einen eingebauten Editor namensnotepad
, der von der Befehlszeile auf die gleiche Weise wienano
für die Zwecke dieser Lektion ausgeführt werden kann.Egal welchen Editor Sie verwenden, Sie müssen wissen, wo er Dateien sucht und speichert. Wenn Sie es von der Shell aus starten, wird (wahrscheinlich) Ihr aktuelles Arbeitsverzeichnis als Standardspeicherort verwendet. Wenn Sie das Startmenü Ihres Computers verwenden, möchten Sie möglicherweise stattdessen Dateien in Ihrem Desktop- oder Dokumentenverzeichnis speichern. Sie können dies ändern, indem Sie zu einem anderen Verzeichnis navigieren, wenn Sie zum ersten Mal „Speichern unter …“
Geben Sie ein paar Textzeilen ein.Sobald wir mit unserem Text zufrieden sind, können wir Strg + O drücken (Strg- oder Strg-Taste drücken und dabei die O-Taste drücken), um unsere Daten auf die Festplatte zu schreiben (wir werden gefragt, in welcher Datei wir diese speichern möchten: Drücken Sie die Eingabetaste, um den vorgeschlagenen Standardwert von draft.txt
zu akzeptieren).
Sobald unsere Datei gespeichert ist, können wir Strg + X verwenden, um den Editor zu beenden undzurück zur Shell.
Strg-, Strg- oder ^ -Taste
Die Strg-Taste wird auch als Strg-Taste bezeichnet. Es gibt verschiedene Möglichkeiten, wie die Verwendung der Steuertaste beschrieben werden kann. Sie können beispielsweise eine Anweisung zum Drücken der Steuertaste und zum Drücken der X-Taste bei gedrückter:
Control-X Control+X Ctrl-X Ctrl+X ^XC-x
In nano sehen Sie am unteren Bildschirmrand
^G Get Help ^O WriteOut
.Dies bedeutet, dass SieControl-G
verwenden können, um Hilfe zu erhalten, undControl-O
, um Ihre Datei zu speichern.
nano
hinterlässt nach dem Beenden keine Ausgabe auf dem Bildschirm, aber ls
zeigt nun an, dass wir eine Datei namens draft.txt
erstellt haben:
$ ls
draft.txt
Erstellen von Dateien eine andere Art und Weise
Wir haben gesehen, wie Textdateien mit dem
nano
herausgeber.Versuchen Sie nun den folgenden Befehl:$ touch my_file.txt
Was hat der Befehl
touch
getan?Wenn Sie Ihr aktuelles Verzeichnis mit dem GUI-Datei-Explorer anzeigen, wird die Datei angezeigt?Verwenden Sie
ls -l
, um die Dateien zu überprüfen. Wie groß istmy_file.txt
?Wann möchten Sie eine Datei auf diese Weise erstellen?
Lösung
Der Befehl
touch
generiert eine neue Datei mit dem Namenmy_file.txt
in Ihrem aktuellen Verzeichnis. Sie können diese neu generierte Datei beobachten, indem Siels
an der Befehlszeilenaufforderung eingeben.my_file.txt
kann auch im yourGUI-Datei-Explorer angezeigt werden.Wenn Sie die Datei mit
ls -l
überprüfen, beachten Sie, dass die Größe vonmy_file.txt
0 Byte beträgt. Mit anderen Worten, es enthält keine Daten.Wenn Siemy_file.txt
mit Ihrem Texteditor öffnen, ist es leer.Einige Programme erzeugen keine Ausgabedateien selbst, sondern erfordern, dass bereits leere Dateien generiert wurden.Wenn das Programm ausgeführt wird, sucht es nach einer vorhandenen Datei, um sie mit ihrer Ausgabe zu füllen. Mit dem Touch-Befehl können Sie eine leere Textdatei effizient generieren, die von solchen Programmen verwendet werden soll.
Was ist In einem Namen?
Sie haben vielleicht bemerkt, dass alle Dateien von Nelle ’something dotsomething‘ heißen, und in diesem Teil der Lektion haben wir immer die Erweiterung
.txt
verwendet. Dies ist nur eine Konvention: Wir können eine Dateimythesis
oderfast alles andere, was wir wollen. Die meisten Leute verwenden jedoch meistens zweiteilige Namen, um ihnen (und ihren Programmen) zu helfen, verschiedene Arten von Dateien voneinander zu unterscheiden. Der zweite Teil eines solchen Namens heißt Dasdateinamenerweiterung, und zeigt anwelche Art von Daten die Datei enthält:.txt
signalisiert eine reine Textdatei,.cfg
ist eine Konfigurationsdatei voller Parameterfür das eine oder andere Programm,.png
ist ein PNG-Bild und so weiter.Dies ist nur eine Konvention, wenn auch eine wichtige. Dateien containbytes: es liegt an uns und unseren Programmen, diese Bytes gemäß den Regeln für Nur-Text-Dateien, PDF-Dokumente, Konfigurationsdateien, Bilder usw. zu interpretieren.
Ein PNG-Bild eines Wals als
whale.mp3
zu benennen, macht es nicht irgendwie magisch zu einer Aufnahme von Walgesang, obwohl es das Betriebssystem veranlassen könnte, es mit einem Musikplayer zu öffnen, wenn jemand darauf doppelklickt.
Verschieben von Dateien und Verzeichnissen
Rückkehr zum data-shell
Verzeichnis,
cd ~/Desktop/data-shell/
In unserem thesis
verzeichnis wir haben eine Datei draft.txt
Das ist kein besonders informativer Name, also ändern wir den Namen der Datei mit mv
, was kurz für „move“ ist:
$ mv thesis/draft.txt thesis/quotes.txt
Das erste Argument sagt mv
was wir ‚bewegen‘,während die zweite ist, wohin es gehen soll.In diesem Fall verschieben wir thesis/draft.txt
nach thesis/quotes.txt
, was den gleichen Effekt wie das Umbenennen der Datei hat.Sicher genug,ls
zeigt uns, dass thesis
jetzt eine Datei mit dem Namen quotes.txt
enthält:
$ ls thesis
quotes.txt
Man muss bei der Angabe des Zieldateinamens vorsichtig sein, da mv
jede vorhandene Datei mit demselben Namen silently überschreibt, was zu Datenverlust führen kann. Eine zusätzliche Option, mv -i
(oder mv --interactive
),kann verwendet werden, um mv
vor dem Überschreiben um Bestätigung zu bitten.
Beachten Sie, dass mv
auch auf Verzeichnissen funktioniert.
Verschieben wir quotes.txt
in das aktuelle Arbeitsverzeichnis.Wir verwenden mv
erneut, aber dieses Mal verwenden wir nur den Namen eines Verzeichnisses als zweites Argument, um mv
mitzuteilen, dass wir den Dateinamen beibehalten, die Datei jedoch an einem neuen Ort ablegen möchten.(Deshalb heißt der Befehl ‚move‘.)In diesem Fall ist der Verzeichnisname, den wir verwenden, der spezielle Verzeichnisname .
, den wir bereits erwähnt haben.
$ mv thesis/quotes.txt .
Der Effekt besteht darin, die Datei aus dem Verzeichnis, in dem sie sich befand, in das aktuelle Arbeitsverzeichnis zu verschieben.ls
zeigt uns nun, dass thesis
leer ist:
$ ls thesis
Des Weiteren listetls
mit einem Dateinamen oder Verzeichnisnamen als Argument nur auf, dass datei oder Verzeichnis.Wir können dies verwenden, um zu sehen, dass quotes.txt
noch in unserem aktuellen Verzeichnis ist:
$ ls quotes.txt
quotes.txt
Dateien in einen neuen Ordner verschieben
Nachdem Jamie die folgenden Befehle ausgeführt hat, stellt sie fest, dass sie die Dateien
sucrose.dat
undmaltose.dat
in den falschen Ordner gelegt hat. Die Dateien sollten im Ordnerraw
abgelegt worden sein.$ ls -F analyzed/ raw/$ ls -F analyzedfructose.dat glucose.dat maltose.dat sucrose.dat$ cd analyzed
Füllen Sie die Lücken aus, um diese Dateien in den
raw/
Ordner zu verschieben(dh in den, in den sie sie vergessen hat)$ mv sucrose.dat maltose.dat ____/____
Lösung
$ mv sucrose.dat maltose.dat ../raw
Denken Sie daran, dass
..
sich auf das übergeordnete Verzeichnis bezieht (dh auf eines über dem aktuellen Verzeichnis)und dass.
verweist auf das aktuelle Verzeichnis.
Kopieren von Dateien und Verzeichnissen
Der Befehl cp
funktioniert sehr ähnlich wie mv
, außer dass er eine Datei kopiert, anstatt sie zu verschieben.Wir können überprüfen, ob es das Richtige getan hat, indem wir ls
mit zwei Pfaden als Argumente verwenden – wie die meisten Unix-Befehlels
können mehrere Pfade gleichzeitig angegeben werden:
$ cp quotes.txt thesis/quotations.txt$ ls quotes.txt thesis/quotations.txt
quotes.txt thesis/quotations.txt
Wir können auch ein Verzeichnis und seinen gesamten Inhalt kopieren, indem wir dierecursive Option -r
,zB um ein Verzeichnis zu sichern:
$ cp -r thesis thesis_backup
Wir können das Ergebnis überprüfen, indem wir den Inhalt des Verzeichnisses thesis
und thesis_backup
auflisten:
$ ls thesis thesis_backup
thesis:quotations.txtthesis_backup:quotations.txt
Umbenennen von Dateien
Angenommen, Sie haben in Ihrem aktuellen Verzeichnis eine Nur-Text-Datei erstellt, die eine Liste von den statistischen Tests, die Sie durchführen müssen, um Ihre Daten zu analysieren, und nannte sie:
statstics.txt
Nachdem Sie diese Datei erstellt und gespeichert haben, stellen Sie fest, dass Sie den Dateinamen falsch geschrieben haben! Sie möchten den Fehler korrigieren, welchen der folgenden Befehle könnten Sie dazu verwenden?
cp statstics.txt statistics.txt
mv statstics.txt statistics.txt
mv statstics.txt .
cp statstics.txt .
Lösung
- Nein. Während dies eine Datei mit dem richtigen Namen erstellen würde, existiert die falsch benannte Datei immer noch im Verzeichnis und müsste gelöscht werden.
- Ja, das würde funktionieren, um die Datei umzubenennen.
- Nein, die Periode(.) gibt an, wohin die Datei verschoben werden soll, gibt jedoch keinen neuen Dateinamen an.
- Nein, die Periode(.) gibt an, wohin die Datei kopiert werden soll, gibt jedoch keinen neuen Dateinamen an.
Verschieben und Kopieren
Was ist die Ausgabe des Befehls closing
ls
in der unten gezeigten Reihenfolge?$ 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
.Die zweite Zeile verschiebt (mv
) die Dateiproteins.dat
in den neuen Ordner (recombined
).Die dritte Zeile erstellt eine Kopie der Datei, die wir gerade verschoben haben. Der schwierige Teil hier ist, wo die Datei warkopiert zu. Denken Sie daran, dass..
„eine Ebene höher gehen“ bedeutet, sodass sich die kopierte Datei jetzt in/Users/jamie
.Beachten Sie, dass..
in Bezug auf das aktuelle Arbeitsverzeichnis interpretiert wird, nicht in Bezug auf den Speicherort der zu kopierenden Datei.Das einzige, was mit ls (in/Users/jamie/data
) angezeigt wird, ist der rekombinierte Ordner.
- Nein, siehe Erklärung oben.
proteins-saved.dat
befindet sich unter/Users/jamie
- Ja
- Nein, siehe Erklärung oben.
proteins.dat
befindet sich unter/Users/jamie/data/recombined
- Nein, siehe Erklärung oben.
proteins-saved.dat
befindet sich unter/Users/jamie
Entfernen von Dateien und Verzeichnissen
Rückkehr zum data-shell
Verzeichnis,lassen Sie uns dieses Verzeichnis aufräumen, indem wir die quotes.txt
Datei entfernen, die wir erstellt haben.Der Unix-Befehl, den wir dafür verwenden, ist rm
(kurz für „remove“):
$ rm quotes.txt
Wir können bestätigen, dass die Datei verschwunden ist, indem wir ls
:
$ ls quotes.txt
ls: cannot access 'quotes.txt': No such file or directory
Löschen ist für immer
Die Unix-Shell hat keinen Papierkorb, den wir wiederherstellen können deletedfiles von (obwohl die meisten grafischen Schnittstellen zu Unix tun). Wenn wir stattdessen Dateien löschen, werden sie aus dem Dateisystem entfernt, sodass Ihr Speicherplatz auf der Festplatte recycelt werden kann. Es gibt zwar Tools zum Auffinden und Wiederherstellen gelöschter Dateien, aber es gibt keine Garantie dafür, dass sie in einer bestimmten Situation funktionieren, da der Computer den Speicherplatz der Datei möglicherweise sofort recycelt.
rm sicher verwenden
Was passiert, wenn wir
rm -i thesis_backup/quotations.txt
ausführen?Warum sollten wir diesen Schutz wünschen, wenn wirrm
?Lösung
$ rm: remove regular file 'thesis_backup/quotations.txt'? y
Die Option
-i
wird vor (jedem) Entfernen angezeigt (verwenden Sie Y, um das Löschen zu bestätigen, oder N, um die Datei zu behalten).Die Unix-Shell hat keinen Papierkorb, sodass alle entfernten Dateien verschwinden forever.By mit der Option-i
können wir überprüfen, ob wir nur die Dateien löschen, die wir entfernen möchten.
Wenn wir versuchen, das thesis
Verzeichnis mit rm thesis
zu entfernen,erhalten wir eine Fehlermeldung:
$ rm thesis
rm: cannot remove `thesis': Is a directory
Dies geschieht, weil rm
standardmäßig nur für Dateien und nicht für Verzeichnisse funktioniert.
rm
kann ein Verzeichnis und seinen gesamten Inhalt entfernen, wenn wir dierecursive Option -r
, und dies ohne Bestätigungsaufforderungen:
$ rm -r thesis
Da es keine Möglichkeit gibt, gelöschte Dateien über die Shell abzurufen, sollterm -r
mit großer Vorsicht verwendet werden (Sie können die interaktive Option rm -r -i
hinzufügen).
Operationen mit mehreren Dateien und Verzeichnissen
Oft muss man mehrere Dateien gleichzeitig kopieren oder verschieben. Dies kann durch Bereitstellen einer Liste einzelner Dateinamen oder Angeben eines Benennungsmusters mithilfe von Platzhaltern erfolgen.
Kopieren mit mehreren Dateinamen
Für diese Übung können Sie die Befehle im
data-shell/data
Verzeichnis testen.Was macht
cp
Im folgenden Beispiel, wenn mehrere Dateinamen und ein Verzeichnisname angegeben werden?$ mkdir backup$ cp amino-acids.txt animals.txt backup/
Was macht
cp
Im folgenden Beispiel, wenn drei oder mehr Dateinamen angegeben werden?$ 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
Lösung
Wenn mehr als ein Dateiname gefolgt von einem Verzeichnisnamen angegeben wird (dh das Zielverzeichnis muss das letzte Argument sein),
cp
kopiert die Dateien in das benannte Verzeichnis.Wenn drei Dateinamen angegeben werden,
cp
wirft einen Fehler wie den folgenden aus, da ein directoryname als letztes Argument erwartet wird.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’. Andererseits stimmtp*.pdb
nur mitpentane.pdb
undpropane.pdb
überein, da das ‚p‘ vorne nur Dateinamen übereinstimmt, die mit dem Buchstaben ‚p‘ beginnen.
?
ist auch ein Platzhalter, aber er entspricht genau einem character.So?ethane.pdb
würde mitmethane.pdb
übereinstimmen, während*ethane.pdb
sowohl mitethane.pdb
als auch mitmethane.pdb
übereinstimmt.Platzhalter können in Kombination miteinander verwendet werden.g.
???ane.pdb
entspricht drei Zeichen gefolgt vonane.pdb
,wascubane.pdb ethane.pdb octane.pdb
ergibt.Wenn die Shell einen Platzhalter sieht, erweitert sie den Platzhalter, um eine Liste übereinstimmender Dateinamen zu erstellen, bevor sie den Befehl ausführen, nach dem sie gefragt haben. Wenn ein Platzhalterausdruck ausnahmsweise nicht mit einer Datei übereinstimmt, übergibt Bash den Ausdruck als Argument an den Befehl, wie er ist. Wenn Sie beispielsweise
ls *.pdf
in das Verzeichnismolecules
eingeben(das nur Dateien enthält, deren Namen mit.pdb
enden), wird eine Fehlermeldung angezeigt, dass keine Datei mit dem Namenwc
undls
jedoch die Listen der Dateinamen, die diesen Ausdrücken entsprechen, aber nicht die Platzhalter selbst. Es ist die Shell, nicht die anderen Programme, die sich damit beschäftigenerweiternde Platzhalter, und dies ist ein weiteres Beispiel für orthogonales Design.
Dateinamen auflisten, die einem Muster entsprechen
Welcher
ls
Befehl(e) erzeugt diese Ausgabe, wenn er immolecules
Verzeichnis ausgeführt wird?
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
. Dies ergibtethane.pdb methane.pdb octane.pdb pentane.pdb
.
zeigt alle Dateien an, deren Namen mit null oder mehr Zeichen beginnen (
*
), gefolgt vom Buchstabent
, dann einem einzelnen Zeichen (?
), dannne.
gefolgt von null oder mehr Zeichen (*
). Dies gibt unsoctane.pdb
undpentane.pdb
aber stimmt nicht mit irgendetwas überein, das inthane.pdb
endet.
behebt die Probleme von Option 2, indem zwei Zeichen (
??
) zwischent
undne
abgeglichen werden. Das ist die Lösung.
zeigt nur Dateien an, die mit
ethane.
beginnen.
Mehr zu Platzhaltern
Sam verfügt über ein Verzeichnis mit Kalibrierungsdaten, Datensätzen und Beschreibungen der Datensätze:
.├── 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
Bevor sie zu einer weiteren Exkursion aufbricht, möchte sie ihre Daten sichern und einige Datensätze an ihren Kollegen Bob senden. Sam benutzt die folgenden Kommandos, um die Arbeit zu erledigen:
$ 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/
Hilf Sam, indem du die Lücken ausfüllst.
Die resultierende Verzeichnisstruktur sollte so aussehen
.├── 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
Lösung
$ 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/
Verzeichnisse und Dateien organisieren
Jamie arbeitet an einem Projekt und sieht, dass ihre Dateien nicht sehr gut organisiert sind:
$ ls -F
analyzed/ fructose.dat raw/ sucrose.dat
Die
fructose.dat
undsucrose.dat
Dateien enthalten Ausgaben ihrer Datenanalyse. Welche Befehle, die in dieser Lektion behandelt werden, muss sie ausführen, damit die folgenden Befehle die gezeigte Ausgabe erzeugen?$ 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 .dat-Dateien in das Verzeichnis ‚analyzed‘.
Eine Ordnerstruktur reproduzieren
Sie starten ein neues Experiment und möchten die Verzeichnisstruktur Ihres vorherigen Experiments duplizieren, um neue Daten hinzuzufügen.
Angenommen, das vorherige Experiment befindet sich in einem Ordner mit dem Namen ‚2016-05-18‘, der einen
data
Ordner enthält, der wiederum Ordner mit dem Namenraw
undprocessed
enthält, die Datendateien enthalten. Ziel ist es, die Ordnerstruktur des Ordners2016-05-18-data
in einen Ordner mit dem Namen2016-05-20
zu kopieren, sodass Ihre endgültige Verzeichnisstruktur folgendermaßen aussieht:2016-05-20/└── data ├── processed └── raw
Welcher der folgenden Befehle würde dieses Ziel erreichen?Was würden die anderen Befehle tun?
$ 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
Lösung
Die ersten beiden Befehlssätze erreichen dieses Ziel.Der erste Satz verwendet relative Pfade, um das Verzeichnis der obersten Ebene vor den Unterverzeichnissen zu erstellen.
Der dritte Befehlssatz gibt einen Fehler aus, da das Standardverhalten von
mkdir
kein Unterverzeichnis eines nicht vorhandenen Verzeichnisses erstellt: Die Ordner der mittleren Ebene müssen zuerst erstellt werden.Der vierte Befehlssatz erreicht dieses Ziel. Denken Sie daran, dass die Option
-p
, gefolgt von einem Pfad mit einem oder mehreren Verzeichnissen,mkdir
veranlasst, nach Bedarf alle Zwischenunterverzeichnisse zu erstellen.Der letzte Befehlssatz generiert die Verzeichnisse ‚raw‘ und ‚processed‘ auf derselben Ebene wie das Verzeichnis ‚data‘.
Wichtige Punkte
cp
kopiert eine Datei.
mkdir
erstellt ein neues Verzeichnis.
mv
verschiebt (benennt) eine Datei oder ein Verzeichnis um.
rm
entfernt (löscht) eine Datei.
*
entspricht null oder mehr Zeichen in einem Dateinamen, also*.txt
entspricht allen Dateien, die auf.txt
enden.
?
entspricht jedem einzelnen Zeichen in einem Dateinamen, also?.txt
entsprichta.txt
aber nichtany.txt
.Die Verwendung der Steuertaste kann auf viele Arten beschrieben werden, einschließlich
Ctrl-X
Control-X
und^X
.Die Shell hat keinen Papierkorb: sobald etwas gelöscht wird, ist es wirklich weg.
Die meisten Dateinamen sind
something.extension
. Die Erweiterung ist nicht erforderlich und garantiert nichts, wird aber normalerweise verwendet, um den Datentyp in der Datei anzugeben.Abhängig von der Art der Arbeit, die Sie ausführen, benötigen Sie möglicherweise einen leistungsfähigeren Texteditor als Nano.
Leave a Reply