このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

cp, mvコマンドとcopy, moveコマンドの微妙な違い:実例とまとめ

Unix/Linuxのcp, mvコマンドとDOS/Windowsのcopy, moveコマンドはほぼ同じ機能を持ちますが、少し違いがあります。両方使っていると混乱することがあります。Unix系コマンドcp, mvのほうを基準として考えて、copy, moveがそれらとどう違うかを実例で示します。

実験の状況

2つのディレクトリ /tmp/foo/, /tmp/bar/ が既にあり、2つのファイル /tmp/foo/a.txt, /tmp/foo/b.txt もある状態。カレントディレクトリは /tmp/。

Unixコマンド cpとmv

コマンド 結果
cp foo/* bar bar/a.txt と bar/b.txt が新たにできる
cp foo/* bar/ bar/a.txt と bar/b.txt が新たにできる
cp foo/* baz エラー(1)
cp foo bar エラー(2)
cp foo bar/ エラー(2)
cp foo/ bar/ エラー(2)
cp foo baz エラー(2)
コマンド 結果
mv foo/* bar foo/a.txt と foo/b.txt が bar/ の下に移動
mv foo/* bar/ foo/a.txt と foo/b.txt が bar/ の下に移動
mv foo/* baz エラー(3)
mv foo/* baz/ エラー(3)
mv foo bar foo/ とその中身が bar/ の下に移動
mv foo bar/ foo/ とその中身が bar/ の下に移動
mv foo/ bar/ foo/ とその中身が bar/ の下に移動


エラー(1):


cp: target `baz' is not a directory
エラー(2):

cp: omitting directory `foo'
エラー(3):

mv: target `baz' is not a directory

Unixでは、ワイルドカード展開をシェルがするので、cp foo/* bar は、cp foo/a.txt foo/b.txt bar と同じです。複数のファイルのコピーは、コピー先がディレクトリ(場所)である必要があります。1つのファイルのコピーは、コピー先がファイル(もの)でもディレクトリ(場所)でもOKです。

昔は、ディレクトリをファイルにコピーできました。コピー先は単なるバイナリファイルになったと思います(記憶が薄れているが)。今は、ディレクトリそのものをコピー対象にはしないんですね。

DOSコマンド copyとmove

Unixと動作が同じとみなしていいときは○、そうでないときは×で示します。どちらもエラーであっても、エラーの意味合いが違えば×です。△はけっこう似てるってこと。

コマンド 結果
copy foo\* bar
copy foo\* bar\
copy foo\* baz × ファイル baz ができる。cat foo/* > baz と同じ
copy foo bar × bar\a.txt と bar\b.txt が新たにできる
copy foo bar\ × bar\a.txt と bar\b.txt が新たにできる
copy foo\ bar\ × bar\a.txt と bar\b.txt が新たにできる
copy foo baz × ファイル baz ができる。cat foo/* > baz と同じ
copy foo baz\ × エラー(A)
コマンド 結果
move foo\* bar
move foo\* bar\
move foo\* baz △ エラー(B)
move foo\* baz\ △ エラー(B)
move foo bar
move foo bar\
move foo\ bar\ × エラー(c)

エラー(A):


foo\a.txt
指定されたパスが見つかりません。
foo\b.txt
指定されたパスが見つかりません。
0 個のファイルをコピーしました。
エラー(B):

C:\tmp\tmp>move foo\* baz
複数のファイルを 1 つのファイルに移動することはできません。
エラー(C):

C:\tmp\tmp>move foo\ bar\
指定されたファイルが見つかりません。

copy foo bar と、bazが存在しないときの copy foo\* baz が要注意ですね。move foo\ bar\ はなんか意味不明。