Linux講座にようこそ。このページは「Linuxの使い方 - 第4章 ファイル操作のコマンド2」です。

Linuxの使い方

4. ファイル操作のコマンド2(2/5)

4.3 コマンドのご紹介2(1/4)

ディレクトリやファイルを取り扱うコマンドのうち、ここでは次のコマンドをご紹介します。前にも述べましたが、コマンドの全ての引数をご紹介しているわけではありませんので、詳細内容をお知りになりたい場合はmanコマンドで調べてください。

4.3.1 ファイルの複写と移動(cpコマンドとmvコマンド)

cpコマンドはファイル及び、ディレクトリの複写を行い、mvコマンドはファイル及び、ディレクトリの移動を行います。移動の場合は移動元のファイルは消えますので注意してください。複写先或は、移動先に同名のファイルがあった場合は標準では上書きされます。また、ファイル名やディレクトリ名を変更したい場合もmvコマンドで行えます。

一般形式

複写元(移動元)ファイル名と複写先(移動先)ファイル名は異なっていても構いません。一度に複数のファイルの複写や移動も出来ますが、その場合は最後に指定したディレクトリの下に、同じ名前のファイルとして複写及び、移動を行います。

※ 複写
$ cp -ipR 複写元ファイルパス名 複写先ファイルパス名
$ cp -ipR 複写元ファイルパス名1 複写元ファイルパス名2 … 複写先ディレクトリパス名

※ 移動
$ mv -i 移動元ファイルパス名 移動先ファイルパス名
$ mv -i 移動元ファイルパス名1 移動元ファイルパス名2 … 移動先ディレクトリパス名

cpコマンドのオプションには、次のようなものがあります。

【表4-5】cpコマンド・オプション
オプション意味
-i, --interactive複写先ファイルが既に存在していた場合、上書きをするかを問い合わせます。
-p,
--preserve=mode,ownership,timestamps
複写元ファイルの属性(保護モードや更新日時、等)を引き継ぎます。当オプションを指定しないと、複写先ファイルの更新日時はコマンドを実行した日時になります。
-R, -r, --recursiveディレクトリの複写を行います。(当該ディレクトリ以下のツリー構造全てを複写します)

mvコマンドのオプションには、次のようなものがあります。

【表4-6】mvコマンド・オプション
オプション意味
-i, --interactive移動先ファイルが既に存在していた場合、上書きをするかを問い合わせます。

実行例

カレントディレクトリの下のmeibo1を同じ場所にmeibo2として複写します。

$ cp meibo1 meibo2
$
$ cp -i meibo1 meibo2 ← meibo2は存在しますので、-iオプションを指定します
cp: overwrite `meibo2'? n ← y又はnで応答します
$

カレントディレクトリの下のMEIBOディレクトリを含めて、以下の全てを/tmpディレクトリの下に複写します。

$ cp -R MEIBO /tmp
$

カレントディレクトリの下のmeibo2をmeibo.oldに名称変更します。

$ mv meibo2 meibo.old
$

4.3.2 ファイル名の変更(renameコマンド)

ファイルやディレクトリの名称変更はmvコマンドで簡単に出来ますが、その場合は1回の実行で1つのファイルの名称変更しか出来ません。名称に規則性がある場合は、renameコマンドで複数ファイルの名称変更ができますので、多くのファイルの名称変更を行う場合はrenameコマンドを使うとよいでしょう。

一般形式

ファイルパス名中の「変更対象文字列」と一致する文字列を「変更文字列」に変更します。ファイルパス名にはワイルドカードも使用出来ます。

$ rename 変更対象文字列 変更文字列 ファイルパス名1 ファイルパス名2 …

renameコマンドのオプションはありません。

実行例

カレントディレクトリの下のmeibo1、meibo2、meiboAをmeibo_1、meibo_2、meibo_Aに名称変更します。

$ ls
data  meibo1  meibo2  meiboA
$
$ rename meibo meibo_ meibo?
$
$ ls
data  meibo_1  meibo_2  meibo_A
$

カレントディレクトリの下のmeibo_1、meibo_2をmeibo01、meibo02に名称変更します。

$ rename meibo_ meibo0 meibo_[12]
$
$ ls
data  meibo01  meibo02  meibo_A
$

4.3.3 ディレクトリの作成と削除(mkdirコマンドとrmdirコマンド)

mkdirコマンドはディレクトリを作成し、rmdirコマンドはディレクトリを削除します。rmdirコマンドで削除する場合、予めデレクトリは空の状態にしておく必要があります。

ファイルやディレクトリの名称については特に規則はありません。長さの制限はファイルシステムの種類などにより異なるかもしれませんが、通常255文字までは大丈夫だと思います。なお、記号の多くはシェルにとって特別な意味がありますので、名前の一部に記号を使うのは避けたほうがよいと思います。名前の一部として使う記号は_(アンダライン)と.(ピリオド)程度にしておいたほうがよいでしょう。

また、UNIX系OSの場合、英字の大文字と小文字は別の文字として認識しますので、大文字と小文字は使い分けて下さい。なお、当講座の例題ではディレクトリ名を大文字にしていますが、ファイルと区別をしやすくするためで、それ以上の意味はありません。

一般形式

一度に複数のディレクトリの作成や削除が出来ます。

$ mkdir -p ディレクトリパス名1 ディレクトリパス名2 …
$ rmdir -p ディレクトリパス名1 ディレクトリパス名2 …
【表4-7】mkdirとrmdirコマンド・オプション
オプション意味
-p, --parents親のディレクトリがない場合、親のディレクトリも作成(mkdir)及び、削除(rmdir)します。

実行例

カレントディレクトリの下にDIRディレクトリを作成し、その下にSUBDIR1とSUBDIR2ディレクトリを作成します。

$ mkdir DIR
$
$ mkdir DIR/SUBDIR1 DIR/SUBDIR2
$

前の例題と同じ事を-pオプションを使用して行います。

$ mkdir -p DIR/SUBDIR1 DIR/SUBDIR2
$

前の例題で作成したディレクトリを全て削除します。

$ rmdir DIR
rmdir: DIR: ディレクトリは空ではありません ← エラーメッセージです
$
$ rmdir DIR/SUBDIR1 DIR/SUBDIR2 ← DIRの下を空にします
$ rmdir DIR
$

4.3.4 ファイルの削除(rmコマンド)

rmコマンドはファイルを削除します。オプションの指定によりディレクトリの削除も出来ます。

一般形式

引数の指定により、一度に複数のファイルやディレクトリの削除も出来ます。

$ rm -if ファイルパス名1 ファイルパス名2 …
$ rm -ifr ディレクトリパス名1 ディレクトリパス名2 …
【表4-8】rmコマンド・オプション
オプション意味
-i, --interactive削除するか否かを問い合わせます。
-f, --force削除するか否かを問い合わせません。
-r, -R, --recursive指定したディレクトリを含め、ツリー構造全てを削除します。

実行例

カレントディレクトリの下のファイルのうち、拡張子が「old」のものを全て削除します。

$ rm *.old ← ディレクトリは削除しません
$

書き込み禁止のファイルを削除します。この場合、-iオプションの有無にかかわらず、削除の問い合わせをしてきます。

$ ls -l meibo
-r--r--r--  1 merry  users  30 3月 17 10:32 meibo ← 書き込み禁止ファイルです
$
$ rm meibo
rm: remove write-protected file `meibo'? y ← 削除の問い合わせです。yで削除します
$

DIRディレクトリの下のファイルとディレクトリを全て削除します。

$ rm -r DIR/* ← DIRディレクトリは空になります
$

4.3.5 ファイルの検索(findコマンド)

findコマンドはファイルやディレクトリの検索を行います。オプションにより検索条件を指定します。

一般形式

第1引数(開始ディレクトリパス名)により検索開始ディレクトリを指定し、第2引数以降に検索条件を指定します。 開始ディレクトリパス名に絶対パス名を指定すると、結果も絶対パス名になり、相対パス名を指定すると相対パス名になります。複数の条件を指定するときは-andを指定すると論理積(かつ)に、指定しないと論理和(または)になります。

$ find 開始ディレクトリパス名 検索条件

検索条件としては次のようなオプションがあります。

【表4-9】findコマンド・オプション
オプション意味
-name 名称指定した名称のファイルやディレクトリを検索します。名称にはワイルドカードを指定できますが、シェルのそれと区別するためにアポストロフィ又は、引用符で括ります。
-type 種別種別にdを指定するとディレクトリを、fを指定するとファイルを検索します。
-atime n最終アクセスがn×24時間前のファイルやディレクトリを検索します。
-mtime n最終修正がn×24時間前のファイルやディレクトリを検索します。
-exec コマンド検索結果を使ってコマンドを実行します。

実行例

/usr/bin/の下から「cat」という名称のファイルを検索します。

$ find /usr/bin -name "cat"
/usr/bin/cat ← 絶対パス名で表示します
$
$ find /usr/bin -name "cat*" ← ワイルドカード(アステリスク記号)を指定します
/usr/bin/catchsegv
/usr/bin/cat
/usr/bin/catman
$

カレントディレクトリ以下のファイルを全て検索します。

$ find . -type f
./MERRY/meibo/data/data1 ← 相対パス名で表示します
./MERRY/meibo/data/data2
./MERRY/meibo/meibo1
./MERRY/meibo/meibo2
./MERRY/meibo/meiboA
./MERRY/tel
$

カレントディレクトリ以下のファイルで、5日以内に修正がかかったものを検索します。以内は-で、以前は+で指定します。

$ find . -type f -and -mtime -5
./MERRY/tel
$

前の例題で検索したファイルの詳細情報を表示します。{}は検索結果を、\;はコマンドの最後を表します。({} \;は固定パターンですので、このままおぼえてください)

$ find . -type f -and -mtime -5 -exec ls -l {} \;
-rw-r--r--  1  merry  users  17 3月 17 21:50 ./MERRY/tel
$