
Ubuntu日本語フォーラム

ログインしていません。
いつもお世話になっています。
自分も端末でのコマンドにいろいろ挑戦しているのですが、つまってしまいました。
デスクトップにあるlogというファイルをUSBにコピーしようとおもい、aliasでCPというコマンドに
cd desktop/ | cp -r log /media/USB \ DISK
を付加しました。しかし、「logというファイルがありません」、と出てしまいます。なぜでしょうか。
初めのパイプでディレクトリはデスクトップに変えたはずなのですが...。
あとUSB DISKがパス上ではUSB \ DISKとなるのはなぜでしょうか。
時間のあるかた、回答おねがいします。
オフライン
パイプの使い方を間違えているようです
パイプは、「直前のコマンドが (標準出力に) 出力したものを、直後のコマンドの (標準入力に) 入力に渡す」というものです
今回やりたいことは、コマンドの順次実行だけなので、以下のようにコマンドをセミコロン ; で区切るだけになります
cd desktop/; cp -r log /media/USB\ DISK
それともう一つ、
pirupiru による投稿:
USB DISKがパス上ではUSB \ DISKとなるのはなぜ
「USB DISK」(「USB」 と 「DISK」の2つの単語の間に、半角空白文字が一文字挟まっている) という8文字をそのままコマンド上に書くと、半角空白文字が単なる区切り文字と認識されてしまい、「USB DISK」が「USB」と「DISK」の2つのパラメーターになってしまいます
半角空白文字の前にバックスラッシュ「\」を書くことで、この半角空白文字が区切り文字ではなく、単なる文字列の一部だと認識されるようになります
つまり、「USB DISK」をコマンドラインで単一のパラメータとして認識させるために、「USB\ DISK」と記述することになります
なお pirupiruさんは「USB \ DISK」のように、「USB」と「\」の間にも半角空白文字を挟んでいるようですが、これだと「USB」「 DISK」(半角空白文字が「DISK」の前に付いている) の2つのパラメーターになりますので注意してください
最後の編集者: ry (2009-01-21 08:51:37)
オフライン
pirupiru による投稿:
aliasでCPというコマンドに
cd desktop/ | cp -r log /media/USB \ DISK
を付加しました。しかし、「logというファイルがありません」、と出てしまいます。なぜでしょうか。
"|"パイプは左右のコマンドをそれぞれ別々のプロセスとして同時に起動し、
左のプロセスの標準出力を右のプロセスの標準入力につなぎます。
"cd"コマンドは自分のプロセスのワーキングディレクトリを変更するコマンドなので、
pirupiruさんのやり方だと右のプロセスのワーキングディレクトリは変更されないままです。
ですから、右のプロセスはlogファイルを見つけられません。
この場合、
cd desktop/ ; cp -r log /media/USB \ DISK
とすればうまくいくかと思います。
というか、この場合、
cp -r desktop/log /media/USB \ DISK
とすればよいと思うのですが、いかがでしょうか?
pirupiru による投稿:
あとUSB DISKがパス上ではUSB \ DISKとなるのはなぜでしょうか。
USB\ DISKとなってはいないでしょうか。
シェルでは普通、スペースがコマンドに対する引数の区切りになるので、ファイルやディレクトリ名そのものにスペースが含まれる場合、
\(バックスラッシュ)でエスケープするか、全体を"(ダブルクォート)や'(シングルクォート)で囲ってあげる必要があります。
cp -r log /media/USB DISK
だと、「logと/media/USBをDISKディレクトリ以下にコピーする」という意味になってしまいます。
# かぶりました ^^; 同時投稿ですね。
最後の編集者: toshio (2009-01-21 09:00:16)
オフライン
ry様、toshio様、回答ありがとうございます。いろいろと参考になり、大変助かりました。まだまだいろいろ勉強することがありそうです。
オフライン