次はうまくいきます(つまり、私が望むことを行います)。
cd /var/www/release/
mkdir wiki
cp -rp ../html/wiki ./
しかし、これを行うと(より直感的なようです)
cp -r ../html/wiki ./wiki
/var/www/release/wiki/wikiを作成します(決して望ましくありません)。
この動作はmvと同じです。誰かがこの行動の裏側にある論理を説明して、後で最初から正しく実行できることを願っています。
答え1
SOURCE
ディレクトリ全体をコピーするには、ディレクトリをどこに保存する必要があるかを知りcp
たいです。DESTINATION
あなたが犯した間違いは、/var/www/release/wiki
テスト後にディレクトリを削除していないことです。mkdir
cp -rp ...
cp -r ...
命令した作業も../html/wiki
同様です。既存のディレクトリを作成./wiki
し、という名前の別のディレクトリを作成しますwiki
。
削除してから/var/www/release/wiki
コマンドcp -r
を再実行すると、期待どおりに機能することがわかります。
答え2
cp
そして3つの形式があります。mv
cp/mv [OPTION]... [-T] SOURCE DEST
cp/mv [OPTION]... SOURCE... DIRECTORY
cp/mv [OPTION]... -t DIRECTORY SOURCE...
フォーム1とフォーム2はフォーマットcp/mv a b
で、フォーム2b
は既存のディレクトリですが、フォーム1b
はターゲットです。これらのあいまいさを避けるために、フォーム2を使用しないでください。フォーム1を使用して実行したい操作を完了し、を使用します-T
。既存のディレクトリに移動またはコピーするには、フォーム3を使用してください。
答え3
最後の引数がcp
既存のディレクトリの場合、cp
ソースファイルはそのディレクトリにコピーされます。mv
同じことをしてください。
ソースディレクトリをターゲットディレクトリとマージしようとしています。ただし、これはソースがディレクトリの場合にのみ意味があります。cp somefile existing-directory/
したがって、実行すると、existing-directory/somefile
cp -r somedir existing-directory/
existing-directory/somedir
cp
cp -r somefile somedir existing-directory/
existing-directory/somefile
existing-directory/somedir
cp something existing-directory
ソースファイルをターゲットディレクトリにコピーします。ソースがディレクトリであり、その内容をコピーするには、次のようにします。
cp -rp something/* existing-directory/
省略されているので参考にしてくださいaで始まる名前のファイル.
。これを含めるには、次の方法を使用する簡単な方法がありますrsync
。
rsync -a something/ existing-directory/
の場合、ソースの末尾にrsync
を配置すると、ソースの内容がターゲットディレクトリにコピーされます。ソースが後ろにない/
場合、/
ソースはターゲットディレクトリにエントリとして作成されます。