Articles

ファイルとディレクトリの操作

概要

教育:30分
演習:20分
質問

  • ファイルとディレクトリを作成、コピー、削除するにはどうすればよいですか?

  • ファイルを編集するにはどうすればよいですか?

目的

  • 指定された図に一致するディレクトリ階層を作成します。/p>

  • エディタを使用して、または既存のファイルをコピーして名前を変更して、その階層内にファイルを作成します。

  • 指定したファイルやディレクトリを削除、コピー、移動します。

ディレクトリの作成

ファイルとディレクトリを探索する方法はわかっていますが、最初デスクトップ上のdata-shellls -Fそれが含まれているものを見るために:div>

ディレクトリを作成します

コマンドを使用してthesismkdir thesis(出力はありません):

$ mkdir thesis

thesismkdir thesis(出力はありません):

$ mkdir thesis

thesis

thesismkdirは’マークディレクトリ’を意味します。thesis

は相対パスです(つまり/what/ever/thesis)のように、新しいディレクトリが現在の作業ディレクトリに作成されます。

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

thesisディレクトリ、まだ何もありません:

$ ls -F thesis

mkdir-pmkdirは、単一の操作で任意の数のネストされたサブディレクトリを持つディレクトリを作成できます。

$ mkdir -p thesis/chapter_1/section_1/subsection_1

-Rオプションは、

オプションを使用して、-Rmkdirlsls -FRthesisディレクトリの下に作成したばかりの新しいディレクトリ階層を再帰的に一覧表示しましょう:

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

同じことをする二つの方法

シェルを使用してディレクトリを作成することは、ファイルエクスプローラオペレーティングシステムのグラフィカルファイルエクスプローラを使用して現在のディレクトリを開くと、thesisディレクトリもそこにシェルとファイルエクスプローラは、ファイルと対話する2つの異なる方法ですが、ファイルとディレクトリ自体は同じです。

ファイルとディレクトリの良い名前

ファイルとディレクトリの複雑な名前は、コマンドラインで作業するとき ここでは、あなたのファイルの名前のためのいくつかの便利なヒントを提供します。

  1. スペースを使用しないでください。

    スペースは名前をより意味のあるものにすることができますが、コマンドライン上の引数を区切るためにスペースを使用するので、ファイルやディレ代わりに-_north-pacific-gyre/north pacific gyre/)。

  2. 名前の先頭に-(ダッシュ)を付けないでください。

    コマンドは、-.-_(アンダースコア)に固執します。

    他の多くの文字は、コマンドライン上で特別な意味を持っています。このレッスンでは、これらのいくつかについて学びます。コマンドが期待どおりに動作しない可能性があり、データが失われる可能性がある特殊文字があります。スペースやその他の特殊文字を持つファイルやディレクトリの名前を参照する必要がある場合は、名前を引用符で囲む必要があります("")。p>

テキストファイルを作成します

作業ディレクトリをthesiscdthesisに変更してから、nanoというテキストエディタを実行してdraft.txtというファイルを作成しましょう。:P>

$ cd thesis$ nano draft.txt

どのエディタですか?

nanoはテキストエディタです’と言うとき、私たちは本当に’テキスト’を意味します:それはテーブル、画像、または他の人間に優しいメディアではなく、プレーンキャラクターデータでのみ動作することができます。 これは複雑なテキストエディタの一つであるため、例で使用しています。 しかし、この特性のために、それはあなたがこのワークショップの後に行う必要がある仕事のために十分に強力でも柔軟でもないかもしれません。 Unixシステム(LinuxやmacOSなど)では、多くのプログラマがEmacsまたはVim(どちらも学習に時間がかかります)、またはgeditなどのグラフィカルエディタを使用します。 Windowsでは、Notepad++を使用します。 Windowsにはnotepadnanoと同じ方法でコマンドラインかどのエディタを使用しても、ファイルを検索して保存する場所を知る必要があります。

シェルから起動すると、(おそらく)現在の作業ディレクトリをデフォルトの場所として使用します。 あなたのコンピュータのスタートメニューを使用する場合は、代わりにデスクトップordocumentsディレクトリにファイルを保存することができます。 これを変更するには、最初に別のディレクトリに移動して’名前を付けて保存…’

数行のテキストを入力しましょう。テキストに満足したら、Ctrl+O(CtrlキーまたはControlキーを押し、それを押しながらOキーを押します)を押してデータをディスクに書き込むことができます(これを保存

アクションでナノテキストエディタのスクリーンショット

ファイルが保存されると、Ctrl+Xを使用してエディタを終了し、シェルに戻

コントロール、Ctrl、または^キー

コントロールキーは’Ctrl’キーとも呼ばれます。 制御キーを使用する方法には様々な方法があります。 たとえば、Controlキーを押しながらXキーを押すように指示することができます。:li>

  • Control-X
  • Control+X
  • Ctrl-X
  • Ctrl+X
  • Ctrl+X
  • Ctrl+X
  • Control+X
  • Ctrl-X
  • Ctrl+X
  • iv id=”nanoでは、画面の下部に沿って^G Get Help ^O WriteOutControl-GControl-Oを使用できることを意味します。
  • nanolsdraft.txt:

    draft.txt:

    draft.txt:

    draft.txtdraft.txtdraft.txt

    $ ls
    draft.txt

    ファイルを別の方法で作成する

    nanoエディタを使用してテキストファイルを作成する方法を見てきました…..次に、次のコマンドを試してみてください:p>

    $ touch my_file.txt
    1. touchコマンドは何をしましたか?GUIファイルエクスプローラを使用して現在のディレクトリを見ると、ファイルが表示されますか?ファイルを検査するには、ls -lmy_file.txt

    2. この方法でファイルを作成する場合はどうすればよいですか?

    ソリューション

    1. touchmy_file.txtlsmy_file.txtは、yourGUIファイルエクスプローラでも表示できます。ファイルを検査するときls -lmy_file.txtmy_file.txtを開くと、空白になります。

    2. 一部のプログラムは出力ファイル自体を生成しませんが、空のファイルが既に生成されている必要があります。プログラムが実行されると、その出力で既存のファイルtopopulateを検索します。 タッチコマンドを使用すると、そのようなプログラムで使用される空白のテキストファイルを効率的に生成できます。

    名前には何がありますか?このレッスンのこの部分では、常に拡張子.txt.txt.txt.txt.txtmythesis.txtプレーンテキストファイルを.png

    はpng画像などです。

    これは単なる慣習ですが、重要なものです。 ファイルcontainbytes: プレーンテキストファイル、PDF文書、configurationfiles、画像などの規則に従って、これらのバイトを解釈するのは、私たちと私たちのプログラム次第です。

    クジラのPNG画像をwhale.mp3と命名しても、whalesongの記録にはなりませんが、誰かがダブルクリックしたときにオペレーティングシステムが音楽プp>

    ファイルとディレクトリの移動

    data-shellディレクトリに戻る、

    cd ~/Desktop/data-shell/

    私たちのthesisdraft.txtmvを使用してファイルの名前を変更しましょう。

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

    最初の引数は

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

    最初の引数は

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

    最初の引数は

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

    最初の引数は

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

    mv

    私たちは”移動”していますが、第二はそれが行く場所です。この場合、thesis/draft.txtthesis/quotes.txtlsthesisquotes.txt:

    $ ls thesis
    $ ls thesis
    thesisquotes.txt:

    $ ls thesis
    quotes.txt

    ターゲットファイル名を指定するときは、mvmv -imv --interactivemv上書きする前に確認を求めることができます。p>

    mvはディレクトリでも動作することに注意してください。p>

    quotes.txtmvmvにファイル名を保持し(これがコマンドが’move’と呼ばれる理由です。)この場合、使用するディレクトリ名は、前述した特別なディレクトリ名.です。p>

    $ mv thesis/quotes.txt .

    効果は、ファイルを現在の作業ディレクトリに移動することです。lsthesisが空であることを示しています。

    $ ls thesis

    さらに、lsquotes.txtが現在のディレクトリにまだあることを確認できます。

    $ ls quotes.txt
    quotes.txt

    maltose.datrawフォルダーに配置されている必要があります。p>

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

    空白を埋めて、これらのファイルをraw/フォルダ(つまり、それらを置くのを忘れたフォルダ)に移動します。

    $ mv sucrose.dat maltose.dat ____/____
    $ mv sucrose.dat maltose.dat ____/____
    $ mv sucrose.dat maltose.dat ____/____

    ソリューション

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

    ...

    .現在のディレクトリを参照します。

    ファイルとディレクトリのコピー

    cpmvlsを使用して正しいことを確認できます—ほとんどのUnixコマンドのように、lsは一度に複数のパスを与えることができます:div>

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

    cursiveオプションを使用して、ディレクトリとそのすべての内容をコピーすることもできます-r、例えば

    $ cp -r thesis thesis_backup

    thesisthesis_backupディレクトリの両方の内容を一覧表示することで、結果を確認できます:p>

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

    ファイルの名前を変更する

    現在のディレクトリにプレーンテキストファイルを作成し、ファイルのリストを格納したとします。データを分析するために必要な統計的テストを行い、名前を付けます:statstics.txt

    このファイルを作成して保存した後、ファイル名のスペルが間違っていることに気付きました! あなたは間違いを修正したい、あなたはそうするために次のコマンドのどれを使うことができますか?

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

    cp statstics.txt .cp statstics.txt .cp statstics.txt .cp statstics.txt .

    ソリューション

    1. いいえ。 これにより、正しい名前のファイルが作成されますが、誤った名前のファイルはまだディレクトリに存在し、削除する必要があります。
    2. はい、これはファイルの名前を変更するために動作します。
    3. いいえ、期間(。)ファイルを移動する場所を示しますが、新しいファイル名は提供されません。
    4. いいえ、期間(。)ファイルをコピーする場所を示しますが、新しいファイル名は提供されません。

    移動とコピー

    閉じるlsコマンドの出力は何ですか?

    $ 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 recombinedproteins.datrecombinedmv../Users/jamie..は、コピーされるファイルの場所ではなく、現在のworkingdirectoryに関して解釈されます。したがって、ls(/Users/jamie/data)を使用して表示されるのは、再結合されたフォルダだけです。

    1. いいえ、上記の説明を参照してください。 proteins-saved.dat/Users/jamie
    2. はい
    3. いいえ、上記の説明を参照してください。 proteins.dat/Users/jamie/data/recombined
    4. いいえ、上記の説明を参照してください。 proteins-saved.dat/Users/jamie

    ファイルとディレクトリを削除します

    quotes.txtファイルを削除して、このディレクトリを整理しましょう。このために使用するUnixコマンドはrm(’remove’の略)です:

    $ rm quotes.txt

    ファイルがなくなったことを確認できます。ls

    ls

    ls

    ls:Div>

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

    削除は永遠にあります

    Unixシェルには、削除されたファイから(unixへのほとんどのグラフィカルインターフェイスが行うが)。 代わりに、ファイルを削除すると、ファイルシステムからリンクが解除され、ディスク上のストレージスペースをリサイクルできます。 削除されたファイルを見つけるためのツールは存在しますが、コンピュータがファイルのディスクスペースをすぐにリサイクルする可能性があるため、特定の状況で作業する保証はありません。

    rmを安全に使用して

    rm -i thesis_backup/quotations.txtrmを使用するときにこの保護が必要なのですか?P>

    ソリューション

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

    -i

    -iオプションは、(すべての)削除の前にプロンプトが表示されます(削除を確認するにはYを使用し、ファイルを保持するにはNを使用します)。Unixシェルにはゴミ箱がないため、削除されたファイルはすべて消えますforever.By -iオプションを使用して、削除したいファイルのみを削除していることを確認する機会があります。p>

    thesisrm thesisを使用してディレクトリを削除しようとすると、エラーメッセージが表示されます。

    thesisrm thesis

    thesis

    rm: cannot remove `thesis': Is a directory

    これは、rmデフォルトでは、ファイルでのみ動作し、ディレクトリでは動作しません。p>

    rm我々はtherecursiveオプションを使用する場合、ディレクトリとそのすべての内容を削除することができます-r、それは:

    $ rm -r thesis

    シェルを使用して削除されたファイルを取得する方法がないことを考えると、rm -rrm -r -i)。

    複数のファイルとディレクトリを使用した操作

    多くの場合、一度に複数のファイルをコピーまたは移動する必要があります。 これは、個々のファイル名のリストを提供するか、ワイルドカードを使用して命名パターンを指定することによって行うことができます。P>

    複数のファイル名を持つコピー

    この演習では、data-shell/datacpcp

    ソリューション

    複数のファイル名の後にディレクトリ名が続く場合(つまり、宛先ディレクトリが最後の引数でなければなりません)、cpcpは最後の引数としてdirectorynameを期待しているため、以下のようなエラーをスローします。

    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’. 一方、p*.pdbpentane.pdbpropane.pdbにのみ一致します。p>

    ?もワイルドカードですが、正確に1つに一致しますcharacter.So ?ethane.pdbmethane.pdb*ethane.pdbethane.pdbmethane.pdbの両方に一致します。

    ワイルドカードは、互いに組み合わせて使用することができます。g. ???ane.pdbane.pdbcubane.pdb ethane.pdb octane.pdbを与えます。

    シェルがワイルドカードを検出すると、wasaskedコマンドを実行する前に、ワイルドカードを展開して一致するファイル名のalistを作成します。 例外として、ワイルドカード式が任意のファイルと一致しない場合、Bashはその式を引数としてコマンドに渡します。 たとえば、molecules.pdbls *.pdf*.pdfwclsのようなコマンドは、これらの式に一致するファイル名のリストを参照しますが、wildcardsthemselvesは参照しません。 拡張ワイルドカードを扱うのは他のプログラムではなくシェルであり、これは直交設計の別の例です。

    パターンに一致するファイル名を一覧表示

    moleculeslsコマンド(s)はこの出力を生成しますか?

    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.pdbethane.pdb methane.pdb octane.pdb pentane.pdb*t??*ne.

    の後にゼロ以上の文字が続きます(*octane.pdbpentane.pdbthane.pdbで終わるものとは一致しません。p>

    tne??)を一致させることにより、オプション2の問題を修正します。 これが解決策です。p>

    ethane.

    ワイルドカードの詳細

    Samには、キャリブレーションデータ、データセット、およびデータセットの説明:

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

    別のフィールドトリップに向かう前に、彼女はデータをバックアップし、同僚のBobにデータセットを送信したいと考えて Samは次のコマンドを使用してジョブを完了します。

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

    空白を埋めてSamを助けます。

    結果のディレクトリ構造は次のようになります

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

    ソリューション

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

    ソリューション

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

    ソリューション

    ディレクトリとファイルの整理

    jamieはプロジェクトに取り組んでおり、彼女のファイルは非常によく整理されていない:P>

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

    fructose.datsucrose.datファイルには、彼女のdataanalysisからの出力が含まれています。 このレッスンで説明するコマンドは、以下のコマンドが表示された出力を生成するために実行する必要がありますか?

    $ 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 .datファイルを’analyzed’ディレクトリに保存します。

    フォルダ構造を再現

    新しい実験を開始しており、新しいデータを追加できるように、前の実験からdirectorystructureを複製したいと考えています。このフォルダーには、データファイルを含むrawprocessedという名前のフォルダーが含まれています。 目標は、フォルダstructureofをコピーすることです2016-05-18-data2016-05-20最終的なディレクトリ構造が次のようになるように

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

    次のコマンドのどれがこの目的を達成するでしょうか?他のコマンドは何をしますか?div>

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

    ソリューション

    コマンドの最初の二つのセットは、この目的を達成します。最初のセットは、サブディレクトリの前にトップレベルのディレクトリを作成するために相対パスを使用します。

    mkdirのデフォルトの動作は、存在しないディレクトリのサブディレクトリを作成しないため、第三のコマンドセットはエラーを出します。

    コマンドの第四のセットは、この目的を達成します。 -pmkdirは必要に応じて中間サブディレクトリを作成

    コマンドの最後のセットは、’data’ディレクトリと同じレベルで’raw’ディレクトリと’processed’ディレクトリを生成します。P>

    キーポイント

    • cp ファイルをコピーします。

    • mkdir 新しいディレクトリを作成します。

    • mv ファイルまたはディレクトリを移動(名前を変更)します。

    • rm ファイルを削除(削除)します。

    • **.txt.txt?.txta.txtany.txtCtrl-XControl-X^Xを含む多くの方法で説明できます。/p>

    • シェルにゴミ箱がありません: 何かが削除されると、それは本当になくなっています。ほとんどのファイルの名前はsomething.extensionです。 拡張子は必須ではなく、何も保証しませんが、通常はファイル内のデータの種類を示すために使用されます。作業の種類によっては、Nanoよりも強力なテキストエディターが必要な場合があります。

    • 作業の種類によっては、Nanoよりも強力なテキストエディターが必要な場合があります。