Articles

praca z plikami i katalogami

przegląd

Nauczanie: 30 min
ćwiczenia: 20 min
pytania

  • Jak mogę tworzyć, kopiować i usuwać pliki i katalogi?

  • Jak mogę edytować pliki?

cele

  • Utwórz hierarchię katalogów pasującą do podanego diagramu.

  • Utwórz pliki w tej hierarchii za pomocą edytora lub kopiując i zmieniając nazwy istniejących plików.

  • Usuń, skopiuj i przenieś określone pliki i / lub katalogi.

tworzenie katalogów

teraz wiemy,jak eksplorować pliki i katalogi, ale w pierwszej kolejności jak je utworzyć?

Krok pierwszy: zobacz, gdzie jesteśmy i co już mamy

wróćmy do naszego data-shellkatalogu na pulpicie i użyj ls -F, aby zobaczyć, co zawiera:

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

, aby utworzyć katalogu

stwórzmy nowy folder o nazwie thesis za pomocą polecenia mkdir thesisi(co nie ma danych wyjściowych):

$ mkdir thesis

Jak można się domyślić z nazwy,mkdir i oznacza 'Mark katalogu.Ponieważ thesis jest ścieżką względną (tj./what/ever/thesis), nowy katalog zostanie utworzony w bieżącym katalogu roboczym:

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

ponieważ właśnie stworzyliśmy katalogthesis, nie ma w nim jeszcze nic:

$ ls -F thesis

zauważ, żemkdir nie ogranicza się do tworzenia pojedynczych katalogów pojedynczo. Opcja -p pozwala mkdir utworzyć katalog z dowolną liczbą zagnieżdżonych podkatalogów w jednej operacji:

$ mkdir -p thesis/chapter_1/section_1/subsection_1

opcja do polecenials wyświetli listę wszystkich zagnieżdżonych podkatalogów w katalogu. Użyjmy ls -FR aby rekurencyjnie wyświetlić nową hierarchię katalogów, którą właśnie stworzyliśmy pod katalogiem thesis :

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

dwa sposoby zrobienia tego samego

użycie powłoki do utworzenia katalogu nie różni się od użycia eksploratora plików.Jeśli otworzysz bieżący katalog za pomocą graficznego eksploratora plików systemu operacyjnego,pojawi się tam również katalog thesis.Podczas gdy powłoka i Eksplorator plików to dwa różne sposoby interakcji z plikami, same pliki i katalogi są takie same.

dobre nazwy dla plików i katalogów

skomplikowane nazwy plików i katalogów mogą sprawić, że Twoje życie będzie bolesne podczas pracy z wierszem poleceń. Tutaj podajemy kilka przydatnych podpowiedzi dla nazw plików.

  1. nie używaj spacji.

    spacje mogą sprawić,że nazwa będzie bardziej znacząca, ale ponieważ spacje są używane do oddzielania argumentów w linii poleceń, lepiej unikać ich w nazwach plików i katalogów.Możesz użyć - lub _ zamiast tego (np. north-pacific-gyre/ zamiastnorth pacific gyre/).

  2. nie rozpoczynaj nazwy od - (dash).polecenia

    traktują Nazwy zaczynające się od- jako opcje.

  3. trzymaj się liter, cyfr, .(kropka lub kropka), -(myślnik) i _ (podkreślenie).

    wiele innych znaków ma specjalne znaczenie w wierszu poleceń.O niektórych z nich dowiemy się podczas tej lekcji.Istnieją znaki specjalne, które mogą spowodować, że polecenie nie działa w sposób niewykluczony, a nawet może spowodować utratę danych.

Jeśli chcesz odwołać się do nazw plików lub katalogów, które mają spacje lub inne znaki specjalne, powinieneś otoczyć nazwę cudzysłowami ("").

Utwórz plik tekstowy

zmieńmy nasz katalog roboczy nathesis używająccd,a następnie uruchom Edytor tekstu o nazwie Nano, aby utworzyć plik o nazwiedraft.txt:

$ cd thesis$ nano draft.txt

który edytor?

Kiedy mówimy, ’nano jest edytorem tekstu’ tak naprawdę mamy na myśli 'tekst’: działa on zwykle z zwykłymi danymi znakowymi, a nie tabelami, obrazami lub innymi mediami przyjaznymi człowiekowi. Używamy go w przykładach, ponieważ jest to jeden z najbardziej skomplikowanych edytorów tekstu. Jednak z powodu tej cechy nie może być wystarczająco silny ani wystarczająco elastyczny do pracy, którą musisz wykonać po tym warsztacie. Na systemach uniksowych (takich jak Linux i macOS) wielu programistów używa Emacsa orvima (oba wymagają więcej czasu na naukę) lub edytora graficznego,takiego jak gedit. W systemie Windows możesz życzyć sobie notatnik++. Windows ma również wbudowany edytor o nazwie notepad, który może być uruchamiany z wiersza poleceń w tym samym trybie jako nano na potrzeby tej lekcji.

bez względu na to, jakiego edytora używasz, musisz wiedzieć, gdzie wyszukuje i zapisuje pliki. Jeśli uruchomisz go z powłoki, użyje (prawdopodobnie)twojego bieżącego katalogu roboczego jako domyślnej lokalizacji. Jeśli korzystasz z menu start komputera, może zamiast tego chcieć zapisać pliki w katalogu desktop ordocuments. Możesz to zmienić, przechodząc do innego katalogu, gdy po raz pierwszy 'Zapisz jako…’

Wpisz kilka linijek tekstu.Gdy już będziemy zadowoleni z naszego tekstu, możemy nacisnąć Ctrl + O (naciśnięcie klawisza Ctrl lub Control i jednocześnie wciśnięcie klawisza o), aby zapisać nasze dane na dysk (zostaniemy zapytani do jakiego pliku chcemy to zapisać: naciśnij Return aby zaakceptować sugerowaną wartość domyślną draft.txt).

zrzut ekranu nano edytora tekstu w akcji

Po zapisaniu naszego Pliku możemy użyć Ctrl+X, aby zamknąć Edytor i powrócić do powłoki.

klawisz Control, Ctrl lub ^

klawisz Control jest również nazywany klawiszem 'Ctrl’. Istnieją różne sposoby, w których można opisać użycie klucza sterującego. Na przykład, możesz zobaczyć instrukcję, aby nacisnąć klawisz Control i przytrzymując go, nacisnąć klawisz X, opisany jako dowolny z:

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

w nano u dołu ekranu zobaczysz ^G Get Help ^O WriteOut.Oznacza to, że możesz użyć Control-G, aby uzyskać pomoc i Control-O, aby zapisać swój plik.

nano nie pozostawia żadnego wyjścia na ekranie po wyjściu,ale ls teraz pokazuje, że stworzyliśmy plik o nazwie draft.txt:

$ ls
draft.txt

tworzenie plików w inny sposób

widzieliśmy, jak tworzyć pliki tekstowe za pomocą edytor nano.Teraz spróbuj wykonać następujące polecenie:

$ touch my_file.txt
  1. co robi Komendatouch?Kiedy patrzysz na bieżący katalog za pomocą eksploratora plików GUI, czy plik pojawia się?

  2. użyj ls -l, aby sprawdzić pliki. Jak duży jest my_file.txt?

  3. Kiedy można w ten sposób utworzyć plik?

rozwiązanie

  1. polecenietouch generuje nowy plik o nazwiemy_file.txt w bieżącym katalogu. Możesz obserwować ten nowo wygenerowany plik, wpisującls w wierszu polecenia. my_file.txt można również przeglądać w Eksploratorze plików yourGUI.

  2. podczas sprawdzania pliku zls -l, zauważ, że rozmiar my_file.txt wynosi 0 bajtów. Innymi słowy, nie zawiera żadnych danych.Jeśli otworzyszmy_file.txt używając edytora tekstu, jest on pusty.

  3. niektóre programy nie generują plików wyjściowych samodzielnie, ale wymagają, aby puste pliki zostały już wygenerowane.Gdy program jest uruchamiany, wyszukuje istniejący plik topopulate z jego wyjściem. Polecenie touch pozwala na wydajne wygenerowanie pustego pliku tekstowego, który będzie używany przez takie programy.

co jest w nazwie?

być może zauważyłeś, że wszystkie pliki Nelle mają nazwę 'something dotsomething’ i w tej części lekcji zawsze używaliśmy rozszerzenia.txt. To tylko konwencja: możemy wywołać plik mythesis lub prawie wszystko, co chcemy. Jednak większość ludzi używa nazw dwuczęściowych przez większość czasu, aby pomóc im (i ich programom) odróżnić różne rodzaje plików od siebie. Druga część takiej nazwy nazywa się rozszerzeniem nazwy pliku i wskazuje, jaki typ danych przechowuje plik: .txt sygnalizuje zwykły plik tekstowy, .pdfwskazuje dokument PDF, .cfg jest plikiem konfiguracyjnym pełnym parametrówdla jakiegoś programu lub innego, .png jest obrazem PNG i tak dalej.

to tylko konwencja, choć ważna. Pliki zawierają bajty: do nas i naszych programów należy interpretacja tych bajtów zgodnie z regułami dla plików tekstowych, dokumentów PDF, plików konfiguracyjnych, obrazów i tak dalej.

nazwanie obrazu wieloryba w formacie PNG jakowhale.mp3 jakoś nie zmienia go w nagranie whalesong, choć może to spowodować, że system operacyjny spróbuje otworzyć go za pomocą odtwarzacza muzyki, gdy ktoś dwukrotnie go kliknie.

przenoszenie plików i katalogów

powrót do katalogu data-shell,

cd ~/Desktop/data-shell/

w naszym thesis katalog mamy plik draft.txt, który nie jest szczególnie pouczającą nazwą,więc zmieńmy nazwę pliku za pomocą mv, który jest skrótem od 'move’:

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

pierwszy argument mówi mv co „przenosimy”, podczas gdy drugi jest tam, gdzie ma się udać.W tym przypadku przenosimy thesis/draft.txt do thesis/quotes.txt,co ma taki sam efekt jak zmiana nazwy pliku.Oczywiście,ls pokazuje nam, że thesis zawiera teraz jeden plik o nazwie quotes.txt:

$ ls thesis
quotes.txt

należy być ostrożnym przy określaniu nazwy pliku docelowego, ponieważ mv spowoduje nadpisanie dowolnego istniejącego pliku o tej samej nazwie, co może doprowadzić do utraty danych. Dodatkowa opcja, mv -i (lub mv --interactive),może być użyta, aby mv poprosić o potwierdzenie przed nadpisaniem.

zauważ, że mv działa również na katalogach.

przenieśmy quotes.txt do bieżącego katalogu roboczego.Ponownie używamy mv, ale tym razem użyjemy tylko nazwy katalogu jako drugiego argumentu,aby powiedzieć mv, że chcemy zachować nazwę pliku, ale umieścić go w nowym miejscu.(Dlatego polecenie nazywa się’move’.)W tym przypadku nazwa katalogu, której używamy, jest specjalną nazwą katalogu ., o której wspomnieliśmy wcześniej.

$ mv thesis/quotes.txt .

efektem jest przeniesienie pliku z katalogu, w którym znajdował się do bieżącego katalogu roboczego.ls teraz pokazuje nam, że thesis jest pusty:

$ ls thesis

Dalej,ls z nazwa pliku lub nazwa katalogu jako argument wyświetla tylko ten plik lub katalog.Możemy użyć tego,aby zobaczyć, że quotes.txt jest nadal w naszym bieżącym katalogu:

$ ls quotes.txt
quotes.txt

przenoszenie plików do nowego folderu

Po uruchomieniu następujących poleceń jamie zdaje sobie sprawę, że umieściła plikisucrose.datImaltose.dat w niewłaściwym folderze. Pliki powinny być umieszczone w folderzeraw.

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

wypełnij puste pola, aby przenieść te pliki do folderuraw/ (tj. tego, w którym zapomniała je umieścić)

$ mv sucrose.dat maltose.dat ____/____

rozwiązanie

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

przypomnijmy, że ..odnosi się do katalogu nadrzędnego (tj. bieżący katalog)i że. odnosi się do bieżącego katalogu.

kopiowanie plików i katalogów

poleceniecp działa bardzo podobnie domv,z tym że kopiuje plik zamiast go przenosić.Możemy sprawdzić, czy zrobił to dobrze, używając lsz dwiema ścieżkami jako argumentami-podobnie jak większość poleceń Uniksa,ls może mieć kilka ścieżek naraz:

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

możemy również skopiować katalog i całą jego zawartość za pomocą opcji-r,np. aby wykonać kopię zapasową katalogu:

$ cp -r thesis thesis_backup

możemy sprawdzić wynik, wymieniając zawartość zarówno katalogu thesis, jak i katalogu :

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

zmiana nazw plików

Załóżmy, że stworzyłeś zwykły plik tekstowy w bieżącym katalogu, zawierający listę testów statystycznych, które musisz wykonać, aby przeanalizować swoje dane, i nazwany: statstics.txt

Po utworzeniu i zapisaniu tego pliku zdajesz sobie sprawę, że błędnie napisałeś nazwę pliku! Chcesz naprawić błąd, którego z poniższych poleceń możesz użyć, aby to zrobić?

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

rozwiązanie

  1. nie. Podczas gdy utworzyłoby to plik o poprawnej nazwie, niepoprawnie nazwany plik nadal istnieje w katalogu i musiałby zostać usunięty.
  2. tak, to zadziała, aby zmienić nazwę pliku.
  3. nie, okres(.) wskazuje, gdzie przenieść plik, ale nie podaje nowej nazwy pliku; identyczna nazwa pliku nie może zostać utworzona.
  4. nie, okres(.) wskazuje, gdzie należy skopiować plik, ale nie podaje nowej nazwy pliku; identycznych nazw plików nie można utworzyć.

Przenoszenie i kopiowanie

Jakie jest wyjście polecenia zamykającegols w kolejności pokazanej poniżej?

$ 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.Druga linia przenosi (mv) plikproteins.dat do nowego folderu (recombined).Trzecia linia tworzy kopię pliku, który właśnie przenieśliśmy. Trudną częścią jest to, gdzie plik został skopiowany. Przypomnijmy, że .. oznacza 'Przejdź na wyższy poziom’, więc skopiowany plik znajduje się teraz w /Users/jamie.Zauważ, że .. jest interpretowane w odniesieniu do bieżącego katalogu roboczego, a nie w odniesieniu do lokalizacji kopiowanego pliku.Tak więc jedyną rzeczą, która pokaże się za pomocą ls (W /Users/jamie/data) jest folder rekombinowany.

  1. nie, Patrz wyjaśnienie powyżej. proteins-saved.dat znajduje się pod adresem/Users/jamie
  2. tak
  3. nie, Patrz wyjaśnienie powyżej. proteins.dat znajduje się pod adresem/Users/jamie/data/recombined
  4. nie, Patrz wyjaśnienie powyżej. proteins-saved.dat znajduje się pod adresem /Users/jamie

usuwanie plików i katalogów

powrót do data-shell, uporządkujmy ten katalog, usuwając utworzony przez nas plik quotes.txt.Polecenie uniksowe, którego użyjemy, to rm (skrót od 'remove’):

$ rm quotes.txt

możemy potwierdzić, że plik zniknął, używając ls:

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

usuwanie jest wieczne

powłoka Uniksa nie ma kosza na śmieci, z którego możemy odzyskać usunięte pliki (choć większość interfejsów graficznych do Uniksa to robi). Zamiast tego, gdy usuwamy pliki, są one odłączane od systemu plików, dzięki czemu ich miejsce na dysku może zostać poddane recyklingowi. Narzędzia do wyszukiwania i odzyskiwania usuniętych plików istnieją, ale nie ma gwarancji, że będą działać w konkretnej sytuacji, ponieważ komputer może od razu odzyskać miejsce na dysku.

bezpieczne korzystanie z rm

co się stanie, gdy wykonamyrm -i thesis_backup/quotations.txt?Po co nam ta ochrona podczas używania rm?

rozwiązanie

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

opcja-i wyświetli monit przed (każdym) usunięciem (użyj Y, aby potwierdzić usunięcie lub N, aby zachować plik).Powłoka Unix nie ma kosza na śmieci, więc wszystkie usunięte pliki znikną forever.By korzystając z opcji-i, mamy możliwość sprawdzenia, czy usuwamy tylko te pliki, które chcemy usunąć.

jeśli spróbujemy usunąć katalogthesis za pomocąrm thesis,otrzymamy komunikat o błędzie:

$ rm thesis
rm: cannot remove `thesis': Is a directory

dzieje się tak, ponieważrm domyślnie działa tylko na plikach, a nie katalogach.

rm może usunąć katalog i całą jego zawartość, jeśli użyjemy opcji -r I zrobi to bez żadnych monitów o potwierdzenie:

$ rm -r thesis

biorąc pod uwagę, że nie ma sposobu na odzyskanie plików usuniętych za pomocą powłoki,rm -r należy używać z dużą ostrożnością (możesz rozważyć dodanie interaktywnej opcjirm -r -i).

operacje z wieloma plikami i katalogami

często trzeba skopiować lub przenieść kilka plików naraz. Można to zrobić, dostarczając listę pojedynczych nazw plików lub określając wzorzec nazewnictwa za pomocą symboli wieloznacznych.

Kopiuj z wieloma nazwami plików

w tym ćwiczeniu możesz przetestować polecenia w katalogudata-shell/data.

w poniższym przykładzie, co robi cp, gdy podano kilka nazw plików i nazwę katalogu?

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

w poniższym przykładzie, co robicp, gdy podano trzy lub więcej nazw plików?

$ 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

rozwiązanie

Jeśli podano więcej niż jedną nazwę pliku, po której następuje nazwa katalogu (tzn. katalog docelowy musi być ostatnim argumentem), cp kopiuje pliki do nazwanego katalogu.

Jeśli podano trzy nazwy plików, cp wyrzuca błąd taki jak ten poniżej, ponieważ oczekuje nazwy katalogu jako ostatniego argumentu.

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’. Z drugiej strony, p*.pdb pasuje Tylko dopentane.pdb I propane.pdb, ponieważ 'p’ z przodu tylko dopasowuje nazwy plików zaczynające się na literę 'p’.

? jest również symbolem wieloznacznym, ale pasuje dokładnie do jednego character.So ?ethane.pdb pasuje domethane.pdb, podczas gdy*ethane.pdb pasuje zarówno doethane.pdb, jak imethane.pdb.

symbole wieloznaczne mogą być używane w połączeniu z każdym innym.g. ???ane.pdb pasuje do trzech znaków,po których następujeane.pdb, dająccubane.pdb ethane.pdb octane.pdb.

gdy powłoka widzi symbol wieloznaczny, rozszerza go, aby utworzyć listę pasujących nazw plików przed uruchomieniem polecenia, dla którego został uruchomiony. Jako wyjątek, jeśli wyrażenie wieloznaczne nie pasuje do pliku, Bash przekaże to wyrażenie jako argument do poleceń, którymi jest. Na przykład wpisanie ls *.pdf w katalogu molecules (który zawiera tylko pliki o nazwach kończących się .pdb) spowoduje komunikat o błędzie, że nie ma pliku o nazwie *.pdf.Jednak generalnie polecenia takie jakwc Ils zobaczą listy nazw plików pasujących do tych wyrażeń, ale nie same symbole wieloznaczne. To powłoka, a nie inne programy, zajmuje się ekspandowaniem symboli wieloznacznych i jest to kolejny przykład prostopadłej konstrukcji.

lista nazw plików pasujących do wzorca

Po uruchomieniu w katalogumolecules, któryls polecenia czy wyprodukuje ten produkt?

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. Daje to ethane.pdb methane.pdb octane.pdb pentane.pdb.

pokazuje wszystkie pliki, których nazwy zaczynają się od zera lub więcej znaków (*), po których następuje literat, następnie pojedynczy znak (?), następniene. po którym następuje zero lub więcej znaków (*). To da nam octane.pdb I pentane.pdb, ale nie pasuje do niczego, co kończy się na thane.pdb.

rozwiązuje problemy opcji 2, dopasowując dwa znaki (??) pomiędzyt Ine. To jest rozwiązanie.

pokazuje tylko pliki zaczynające się odethane..

więcej informacji na temat symboli wieloznacznych

Sam ma katalog zawierający dane kalibracyjne, zbiory danych i opisy zestawów danych:

.├── 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

zanim wyruszy na kolejną wycieczkę, chce wykonać kopię zapasową swoich danych i wysłać kilka zestawów danych do swojego kolegi Boba. Sam używa następujących poleceń, aby wykonać zadanie:

$ 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/

pomóż Samowi, wypełniając spacje.

wynikowa struktura katalogów powinna wyglądać następująco

.├── 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

rozwiązanie

$ 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/

porządkowanie katalogów i plików

jamie pracuje nad projektem i widzi, że jej pliki nie są zbyt dobrze zorganizowane:

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

fructose.dat Isucrose.dat pliki zawierają dane wyjściowe z jej analizy danych. Jakie polecenia opisane w tej lekcji musi uruchomić, aby poniższe polecenia wygenerowały pokazany wynik?

$ 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 .pliki dat do katalogu „analizowanego”.

Reprodukuj strukturę folderów

rozpoczynasz nowy eksperyment i chcesz powielić strukturę katalogu z poprzedniego eksperymentu, aby móc dodać nowe dane.

Załóżmy,że poprzedni eksperyment znajduje się w folderze o nazwie '2016-05-18′, który zawieradata folder, który z kolei zawiera foldery o nazwieraw Iprocessed, które zawierają pliki danych. Celem jest skopiowanie struktury folderu 2016-05-18-data do folderu o nazwie 2016-05-20 tak, aby końcowa struktura katalogu wyglądała następująco:

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

które z poniższych zestawów poleceń osiągnąć ten cel?Co zrobiłyby inne komendy?

$ 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

na rozwiązanie

dwie pierwsze grupy zespołów osiągnięcia tego celu.Pierwszy zestaw używa ścieżek względnych do utworzenia katalogu najwyższego poziomu przed podkatalogami.

trzeci zestaw poleceń spowoduje błąd, ponieważ domyślne zachowaniemkdir nie utworzy podkatalogu nieistniejącego katalogu: najpierw należy utworzyć foldery poziomu pośredniego.

czwarty zestaw komend osiąga ten cel. Pamiętaj, że opcja-p, po której następuje ścieżka jednego lub więcej katalogów, spowoduje, żemkdir utworzy dowolne pośrednie podkatalogi zgodnie z wymaganiami.

końcowy zestaw poleceń generuje katalogi „surowe” i „przetworzone” na tym samym poziomie co katalog „dane”.

kluczowe punkty

  • cp kopiuje plik.

  • mkdir tworzy nowy katalog.

  • mv przenosi (zmienia nazwę) plik lub katalog.

  • rm usuwa (usuwa) plik.

  • *dopasowuje zero lub więcej znaków w nazwie pliku, więc *.txtdopasowuje wszystkie pliki zakończone na .txt.

  • ?pasuje do dowolnego pojedynczego znaku w nazwie pliku, więc ?.txtpasuje do a.txt, ale nie any.txt.

  • użycie klucza sterującego można opisać na wiele sposobów, w tym Ctrl-XControl-XI ^X.

  • powłoka nie posiada kosza na śmieci: gdy coś zostanie usunięte, to naprawdę zniknie.

  • większość nazw plików to something.extension. Rozszerzenie nie jest wymagane i niczego nie gwarantuje, ale jest zwykle używane do wskazania typu danych w pliku.

  • w zależności od rodzaju wykonywanej pracy, możesz potrzebować mocniejszego edytora tekstu niż Nano.