CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
みなさんこんにちは。株式会社パイプラインの濱田です。前回はディレクトリ操作の基本を取り上げました。今回はファイル操作の基本について取り上げます。
前回、以下のクイズを出題しました。皆さん、チャレンジしていただけましたでしょうか?
カレントディレクトリ以下に、以下の階層のディレクトリを作成せよ。同じ成果が得られるなら、入力した文字数が少なければ少ないほどよいものとする。
test
└test1
└test2
└test3
└test4
一番シンプルな解答は以下になります。
mkdir -p test/test1/test2/test3/test4
文字数は多くなってしまいますが、bashシェルのfor文ループで回す方法もあります。下記コマンドは行が折り返されていますが、1行で実行します。
mkdir -p test ; cd test ; for D in $(seq 1 4); do mkdir -p test${D}; cd test${D}; mkdir -p test${D}; done
この方法を用いると、変数Dに与える値を4からもっと大きな数字に変更することで、より深い階層のディレクトリを一撃で作成することができます。すべて手打ちのコマンド入力よりも正確な作業ができますね。 ただし1点注意しておきたいのは、Linuxでは1つのファイルシステムに作成できるディレクトリ数や階層の深さなどに制限があり、また、1つのディレクトリの配下に多くのディレクトリやファイルがあると、ファイル操作の速度に影響が出ることがありますので、ディレクトリ構造の設計には充分注意してください。
今回は、以下の操作を取り上げます。
ファイルのコピーを行うにはcpコマンドを利用します。A.txtをB.txtへコピーするには以下のコマンドを実行します。
cp A.txt B.txt
lsコマンドで確認してみましょう。図表1のように、「A.txt B.txt」と表示されていれば、コピーされた (A.txtとB.txtが存在する) ことが推測できます。
nullpopopo@DESKTOP-FUJ2F2G:~$ ls A.txt B.txt
A.txt B.txt
では何故ここで「コピーできました」と言い切らなかったのでしょうか?cpコマンドを実行するより前にB.txtが存在していたかも知れませんし、そのB.txtの内容がA.txtと同一であるという確証がないためです。それでは、lsコマンドに -l オプションをつけて詳細を表示してみましょう。
nullpopopo@DESKTOP-FUJ2F2G:~$ ls -l A.txt B.txt
-rw-r--r-- 1 nullpopopo nullpopopo 20377 Sep 11 22:48 A.txt
-rw-r--r-- 1 nullpopopo nullpopopo 20377 Sep 11 22:50 B.txt
A.txtが作成されてから2分後にB.txtがコピーされていることがわかります。もし、同じファイルをタイムスタンプで世代管理したい場合、コピーした日時では不都合で、元のファイルのタイムスタンプでコピーしたいこともあるでしょう。この場合は、cpコマンドのオプションに -p をつけて実行します。 cp -p A.txt B.txt それでは出力結果を見てみましょう。
nullpopopo@DESKTOP-FUJ2F2G:~$ ls -l A.txt B.txt
-rw-r--r-- 1 nullpopopo nullpopopo 20377 Sep 11 22:48 A.txt
-rw-r--r-- 1 nullpopopo nullpopopo 20377 Sep 11 22:48 B.txt
先ほどコピーしたB.txtのタイムスタンプが、オリジナルのA.txtのタイムスタンプで上書きされたことがおわかりいただけたかと思います。
あるファイルを異なるディレクトリへ移動するにはmvコマンドを利用します。実習用にSAMPLE1 SAMPLE2の2つのディレクトリを作成しましょう。
mkdir -p SAMPLE1 SAMPLE2
それではA.txtをSAMPLE1ディレクトリへ移動してみます。
mv A.txt SAMPLE1
SAMPLE1ディレクトリの中身をlsコマンドで確認してみましょう。
nullpopopo@DESKTOP-FUJ2F2G:~$ ls -l SAMPLE1/
total 20
-rw-r--r-- 1 nullpopopo nullpopopo 20377 Sep 11 22:48 A.txt
次に、SAMPLE1ディレクトリにあるA.txtをSAMPLE2ディレクトリへ移動します。 mv SAMPLE1/A.txt SAMPLE2 先ほどと同様、lsコマンドで確認します。まずはSAMPLE1ディレクトリが空になっていることを確認です。
nullpopopo@DESKTOP-FUJ2F2G:~$ ls -l SAMPLE1
total 0
先ほどあったA.txtがSAMPLE1ディレクトリの中にないことがわかりますね。それではSAMPLE2ディレクトリもlsコマンドで確認してみましょう。
nullpopopo@DESKTOP-FUJ2F2G:~$ ls -l SAMPLE2
total 20
-rw-r--r-- 1 nullpopopo nullpopopo 20377 Sep 11 22:48 A.txt
先ほどSAMPLE1ディレクトリにあったA.txtがSAMPLE2ディレクトリに移動されたことが確認できました。
さて、前回と今回はディレクトリやファイルの操作について学びましたが、次回からはテキストファイルの編集について最低限の操作を学んでいきたいと思います。
CTC教育サービスではLinuxをはじめ多数の研修コースが用意されています。ご自身の興味や業務の必要性にあったコースを受講してみてはいかがでしょうか。
https://www.school.ctc-g.co.jp/category/
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes