左から右へ処理する

linuxコマンドの引数の処理順は、左から右への法則性があります。コマンドだけでなく、コマンドラインも、左から右へパイプでつなげて、フィルタリングできるようになっています。

今回は、cpコマンドを、左→右を意識して使ってみます(cpコマンドの第1引数を左、第2引数を右、と考えてください)。

まずは実験用でファイルを作っておきます。

~$ echo AAAAA > a
~$ cat a
AAAAA

単純なファイルのコピーから。

~$ cp a b
~$ cat b
AAAAA
~$ 

左から右にコピーされました。
bを削除し、もう一度やってみます。今度はverboseオプションを指定して確認します。

~$ cp -v a b
`a' -> `b'
~$ cat b
AAAAA
~$ 

記号の->はコピーの方向を表しています。
左から右へコピーされましたね。

次は左のファイルを削除してcpを使ってみましょう。

~$ rm a
~$ cp a b
cp: `a' を stat できません: そのようなファイルやディレクトリはありません
~$ ls
b 

ファイルaは存在しないので、当然コピーできません。つまり左から右へコピーを試みたということです。

コピー先をディレクトリにしてみましょう。

~$ mkdir dir1
~$ cp -v b dir1
`b' -> `dir1/b'
~$ cat dir1/b
AAAAA
~$ 

これも左から右へコピーされました。

順序を変えたい場合は、オプションを指定します。-tオプションで、コピー先ディレクトリを指定できます。

~$ rm dir1/b
~$ cp -vt dir1 b
`b' -> `dir1/b'
~$ cat dir1/b
AAAAA
~$ 

右から左になりました。tarコマンドがこのようなタイプですね(例 tar cf 先ファイル.tar 元ファイル …)。

コメント

  1. […] 『SPACE BATTLESHIP ヤマト』のガミラス星人は、個と全体が同一で統一された意思で動くロボットみたいな星人でした。まるで、linuxのハードリンクだなあと思いましたので、今回はlnコマンドです。 上達の近道は土台づくりってことで、「左から右へ処理する」や「コピーいろいろ」ではcpコマンドの使い方を見直していましたが、今回も基礎ですね。lnコマンドは、 ln -s ファイル リンク名 で使うことが多いですが、今回は -sオプションを使うシンボリックリンクではなく、ハードリンクです。 […]

  2. Justus says:

    What a joy to find such clear thgnikni. Thanks for posting!

タイトルとURLをコピーしました