ファイルとディレクトリの操作
概要
教育:30分
演習:20分質問
ファイルとディレクトリを作成、コピー、削除するにはどうすればよいですか?
ファイルを編集するにはどうすればよいですか?
目的
指定された図に一致するディレクトリ階層を作成します。/p>
エディタを使用して、または既存のファイルをコピーして名前を変更して、その階層内にファイルを作成します。
指定したファイルやディレクトリを削除、コピー、移動します。
ディレクトリの作成
ファイルとディレクトリを探索する方法はわかっていますが、最初デスクトップ上のdata-shell
ls -F
それが含まれているものを見るために:div>
ディレクトリを作成します
コマンドを使用してthesis
mkdir thesis
(出力はありません):
$ mkdir thesis
thesis
mkdir thesis
(出力はありません):
$ mkdir thesis
thesis
thesis
mkdir
は’マークディレクトリ’を意味します。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
-p
mkdir
は、単一の操作で任意の数のネストされたサブディレクトリを持つディレクトリを作成できます。
$ mkdir -p thesis/chapter_1/section_1/subsection_1
-R
オプションは、
オプションを使用して、-R
mkdir
ls
ls -FR
thesis
ディレクトリの下に作成したばかりの新しいディレクトリ階層を再帰的に一覧表示しましょう:
$ 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つの異なる方法ですが、ファイルとディレクトリ自体は同じです。
ファイルとディレクトリの良い名前
ファイルとディレクトリの複雑な名前は、コマンドラインで作業するとき ここでは、あなたのファイルの名前のためのいくつかの便利なヒントを提供します。
スペースを使用しないでください。
スペースは名前をより意味のあるものにすることができますが、コマンドライン上の引数を区切るためにスペースを使用するので、ファイルやディレ代わりに
-
_
north-pacific-gyre/
north pacific gyre/
)。名前の先頭に
-
(ダッシュ)を付けないでください。コマンドは、
-
.
-
_
(アンダースコア)に固執します。他の多くの文字は、コマンドライン上で特別な意味を持っています。このレッスンでは、これらのいくつかについて学びます。コマンドが期待どおりに動作しない可能性があり、データが失われる可能性がある特殊文字があります。スペースやその他の特殊文字を持つファイルやディレクトリの名前を参照する必要がある場合は、名前を引用符で囲む必要があります(
""
)。p>
テキストファイルを作成します
作業ディレクトリをthesis
cd
thesis
に変更してから、nanoというテキストエディタを実行してdraft.txt
というファイルを作成しましょう。:P>
$ cd thesis$ nano draft.txt
どのエディタですか?
‘
nano
はテキストエディタです’と言うとき、私たちは本当に’テキスト’を意味します:それはテーブル、画像、または他の人間に優しいメディアではなく、プレーンキャラクターデータでのみ動作することができます。 これは複雑なテキストエディタの一つであるため、例で使用しています。 しかし、この特性のために、それはあなたがこのワークショップの後に行う必要がある仕事のために十分に強力でも柔軟でもないかもしれません。 Unixシステム(LinuxやmacOSなど)では、多くのプログラマがEmacsまたはVim(どちらも学習に時間がかかります)、またはgeditなどのグラフィカルエディタを使用します。 Windowsでは、Notepad++を使用します。 Windowsにはnotepad
nano
と同じ方法でコマンドラインかどのエディタを使用しても、ファイルを検索して保存する場所を知る必要があります。シェルから起動すると、(おそらく)現在の作業ディレクトリをデフォルトの場所として使用します。 あなたのコンピュータのスタートメニューを使用する場合は、代わりにデスクトップ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 WriteOut
Control-G
Control-O
を使用できることを意味します。
nano
ls
draft.txt
:
draft.txt
:
draft.txt
:
draft.txt
draft.txt
draft.txt
$ ls
draft.txt
ファイルを別の方法で作成する
nano
エディタを使用してテキストファイルを作成する方法を見てきました…..次に、次のコマンドを試してみてください:p>$ touch my_file.txt
touch
コマンドは何をしましたか?GUIファイルエクスプローラを使用して現在のディレクトリを見ると、ファイルが表示されますか?ファイルを検査するには、ls -l
my_file.txt
?この方法でファイルを作成する場合はどうすればよいですか?
ソリューション
touch
my_file.txt
ls
my_file.txt
は、yourGUIファイルエクスプローラでも表示できます。ファイルを検査するときls -l
my_file.txt
my_file.txt
を開くと、空白になります。一部のプログラムは出力ファイル自体を生成しませんが、空のファイルが既に生成されている必要があります。プログラムが実行されると、その出力で既存のファイルtopopulateを検索します。 タッチコマンドを使用すると、そのようなプログラムで使用される空白のテキストファイルを効率的に生成できます。
名前には何がありますか?このレッスンのこの部分では、常に拡張子
.txt
.txt
.txt
.txt
.txt
mythesis
.txt
プレーンテキストファイルを.png
はpng画像などです。
これは単なる慣習ですが、重要なものです。 ファイルcontainbytes: プレーンテキストファイル、PDF文書、configurationfiles、画像などの規則に従って、これらのバイトを解釈するのは、私たちと私たちのプログラム次第です。
クジラのPNG画像をwhale.mp3
と命名しても、whalesongの記録にはなりませんが、誰かがダブルクリックしたときにオペレーティングシステムが音楽プp>
ファイルとディレクトリの移動
data-shell
ディレクトリに戻る、
cd ~/Desktop/data-shell/
私たちのthesis
draft.txt
mv
を使用してファイルの名前を変更しましょう。
$ 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.txt
thesis/quotes.txt
ls
thesis
quotes.txt
:
$ ls thesis
$ ls thesis
thesis
quotes.txt
:
$ ls thesis
quotes.txt
ターゲットファイル名を指定するときは、mv
mv -i
mv --interactive
mv
上書きする前に確認を求めることができます。p>
mv
はディレクトリでも動作することに注意してください。p>
quotes.txt
mv
mv
にファイル名を保持し(これがコマンドが’move’と呼ばれる理由です。)この場合、使用するディレクトリ名は、前述した特別なディレクトリ名.
です。p>
$ mv thesis/quotes.txt .
効果は、ファイルを現在の作業ディレクトリに移動することです。ls
thesis
が空であることを示しています。
$ ls thesis
さらに、ls
quotes.txt
が現在のディレクトリにまだあることを確認できます。
$ ls quotes.txt
quotes.txt
とmaltose.dat
raw
フォルダーに配置されている必要があります。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
..
.
.
現在のディレクトリを参照します。
ファイルとディレクトリのコピー
cp
mv
ls
を使用して正しいことを確認できます—ほとんどの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
thesis
thesis_backup
ディレクトリの両方の内容を一覧表示することで、結果を確認できます:p>
$ ls thesis thesis_backup
thesis:quotations.txtthesis_backup:quotations.txt
ファイルの名前を変更する
現在のディレクトリにプレーンテキストファイルを作成し、ファイルのリストを格納したとします。データを分析するために必要な統計的テストを行い、名前を付けます:
statstics.txt
このファイルを作成して保存した後、ファイル名のスペルが間違っていることに気付きました! あなたは間違いを修正したい、あなたはそうするために次のコマンドのどれを使うことができますか?
cp statstics.txt statistics.txt
mv statstics.txt statistics.txt
mv statstics.txt .
cp statstics.txt .
cp statstics.txt .
cp statstics.txt .
cp statstics.txt .
cp statstics.txt .
ソリューション
- いいえ。 これにより、正しい名前のファイルが作成されますが、誤った名前のファイルはまだディレクトリに存在し、削除する必要があります。
- はい、これはファイルの名前を変更するために動作します。
- いいえ、期間(。)ファイルを移動する場所を示しますが、新しいファイル名は提供されません。
- いいえ、期間(。)ファイルをコピーする場所を示しますが、新しいファイル名は提供されません。
移動とコピー
閉じる
ls
コマンドの出力は何ですか?$ 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
proteins.dat
recombined
mv
..
/Users/jamie
..
は、コピーされるファイルの場所ではなく、現在のworkingdirectoryに関して解釈されます。したがって、ls(/Users/jamie/data
)を使用して表示されるのは、再結合されたフォルダだけです。
- いいえ、上記の説明を参照してください。
proteins-saved.dat
/Users/jamie
- はい
- いいえ、上記の説明を参照してください。
proteins.dat
/Users/jamie/data/recombined
- いいえ、上記の説明を参照してください。
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.txt
rm
を使用するときにこの保護が必要なのですか?P>ソリューション
$ rm: remove regular file 'thesis_backup/quotations.txt'? y
-i
-i
オプションは、(すべての)削除の前にプロンプトが表示されます(削除を確認するにはYを使用し、ファイルを保持するにはNを使用します)。Unixシェルにはゴミ箱がないため、削除されたファイルはすべて消えますforever.By-i
オプションを使用して、削除したいファイルのみを削除していることを確認する機会があります。p>
thesis
rm thesis
を使用してディレクトリを削除しようとすると、エラーメッセージが表示されます。
thesis
rm thesis
thesis
rm: cannot remove `thesis': Is a directory
これは、rm
デフォルトでは、ファイルでのみ動作し、ディレクトリでは動作しません。p>
rm
我々はtherecursiveオプションを使用する場合、ディレクトリとそのすべての内容を削除することができます-r
、それは:
$ rm -r thesis
シェルを使用して削除されたファイルを取得する方法がないことを考えると、rm -r
rm -r -i
)。
複数のファイルとディレクトリを使用した操作
多くの場合、一度に複数のファイルをコピーまたは移動する必要があります。 これは、個々のファイル名のリストを提供するか、ワイルドカードを使用して命名パターンを指定することによって行うことができます。P>
複数のファイル名を持つコピー
この演習では、
data-shell/data
cp
cp
ソリューション
複数のファイル名の後にディレクトリ名が続く場合(つまり、宛先ディレクトリが最後の引数でなければなりません)、
cp
cp
は最後の引数として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 thedata-shell/molecules
directory:*.pdb
matchesethane.pdb
propane.pdb
, and everyfile that ends with ‘.pdb’. 一方、p*.pdb
pentane.pdb
propane.pdb
にのみ一致します。p>
?
もワイルドカードですが、正確に1つに一致しますcharacter.So?ethane.pdb
methane.pdb
*ethane.pdb
ethane.pdb
methane.pdb
の両方に一致します。ワイルドカードは、互いに組み合わせて使用することができます。g.
???ane.pdb
ane.pdb
cubane.pdb ethane.pdb octane.pdb
を与えます。シェルがワイルドカードを検出すると、wasaskedコマンドを実行する前に、ワイルドカードを展開して一致するファイル名のalistを作成します。 例外として、ワイルドカード式が任意のファイルと一致しない場合、Bashはその式を引数としてコマンドに渡します。 たとえば、
molecules
.pdb
ls *.pdf
wc
ls
のようなコマンドは、これらの式に一致するファイル名のリストを参照しますが、wildcardsthemselvesは参照しません。 拡張ワイルドカードを扱うのは他のプログラムではなくシェルであり、これは直交設計の別の例です。パターンに一致するファイル名を一覧表示
molecules
ls
コマンド(s)はこの出力を生成しますか?
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
ethane.pdb methane.pdb octane.pdb pentane.pdb
*
t
?
?
*
ne.
の後にゼロ以上の文字が続きます(
*
octane.pdb
pentane.pdb
thane.pdb
で終わるものとは一致しません。p>
t
ne
??
)を一致させることにより、オプション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.dat
sucrose.dat
ファイルには、彼女のdataanalysisからの出力が含まれています。 このレッスンで説明するコマンドは、以下のコマンドが表示された出力を生成するために実行する必要がありますか?$ 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ファイルを’analyzed’ディレクトリに保存します。フォルダ構造を再現
新しい実験を開始しており、新しいデータを追加できるように、前の実験からdirectorystructureを複製したいと考えています。このフォルダーには、データファイルを含む
raw
processed
という名前のフォルダーが含まれています。 目標は、フォルダstructureofをコピーすることです2016-05-18-data
2016-05-20
最終的なディレクトリ構造が次のようになるように2016-05-20/└── data ├── processed └── raw
次のコマンドのどれがこの目的を達成するでしょうか?他のコマンドは何をしますか?div>
$ mkdir 2016-05-20$ cd 2016-05-20$ mkdir data$ mkdir raw processed
ソリューション
コマンドの最初の二つのセットは、この目的を達成します。最初のセットは、サブディレクトリの前にトップレベルのディレクトリを作成するために相対パスを使用します。
mkdir
のデフォルトの動作は、存在しないディレクトリのサブディレクトリを作成しないため、第三のコマンドセットはエラーを出します。コマンドの第四のセットは、この目的を達成します。
-p
mkdir
は必要に応じて中間サブディレクトリを作成コマンドの最後のセットは、’data’ディレクトリと同じレベルで’raw’ディレクトリと’processed’ディレクトリを生成します。P>
キーポイント
cp
ファイルをコピーします。
mkdir
新しいディレクトリを作成します。
mv
ファイルまたはディレクトリを移動(名前を変更)します。
rm
ファイルを削除(削除)します。
*
*.txt
.txt
?.txt
a.txt
any.txt
Ctrl-X
Control-X
^X
を含む多くの方法で説明できます。/p>シェルにゴミ箱がありません: 何かが削除されると、それは本当になくなっています。ほとんどのファイルの名前は
something.extension
です。 拡張子は必須ではなく、何も保証しませんが、通常はファイル内のデータの種類を示すために使用されます。作業の種類によっては、Nanoよりも強力なテキストエディターが必要な場合があります。作業の種類によっては、Nanoよりも強力なテキストエディターが必要な場合があります。
Leave a Reply