Linux でディレクトリ構造のみコピーする

Linux

概要

ディレクトリをそのままコピーするのじゃなくて、ディレクトリ構造のみをコピーしたいケースは無いででしょうか?

例えば、メールサーバーを移行した際に、ユーザーのメールボックスの領域だったり、Apacheでバーチャルホストを構築していてログディレクトリのみコピーしないとApacheを起動しないケースなど・・・

意外とあるかもしれないので、ディレクトリのみコピーする方法を紹介します

findとmkdirを組み合わせてコピー

ネットでディレクトリのみコピーとかで検索すると、よく検索結果にHITするケースです

下記のコマンドでは、/var/tmp/backup へ /home/log 以下のディレクトリをコピーしているますが、/var/tmp/backupのコピーするとコピー元の最下層のディレクトリは、「/var/tmp/backup/home/log」となり、フルパスでコピーしされいるので、少しやりたいこと違います。もう少しコマンドを繋げたらいい感じになると思いますが、コマンドが複雑になりそうです

$ find /home/log -type d | xargs -I{} mkdir -p /var/tmp/backup/{}

$ ls /var/tmp/backup
home

rsyncでディレクトリのみコピー

findとmkdirだと、ちゃんと動かなかったので、rysncを利用してディレクトリのみコピーします。
コマンドは以下のようにすればOKです

rsync -avz –include “*/” –exclude “*” 【コピー元】 【コピー先】

書式: rsync -avz --include "*/" --exclude "*" 【コピー元】 【コピー先】

例)/var/tmp/backup へ /home/log 以下のディレクトリ構造だけをコピーする。

$ rsync -avz --include "*/" --exclude "*" /home/log /var/tmp/backup
$ ls /var/tmp/backup
log
スポンサーリンク
スポンサーリンク
スポンサーリンク
スポンサーリンク
Linux
スポンサーリンク
adminをフォローする

コメント

  1. 通りすがり より:

    findとmkdirを使ったコピーですが、最後に/dirが足りないんじゃないですか?
    正しくは:$ find /home/log -type d | xargs -I dir mkdir -p /var/tmp/backup/dir

  2. admin より:

    指摘のあったとおりに、検証すると、下記のコマンドでディレクトリはコピーできました。フルパスにみたいになりますね
    $ find /home/log -type d | xargs -I {} mkdir -p /var/tmp/backup/{}

  3. 匿名 より:

    rsyncの赤文字の行ですが、*の前の“が両方とも全角になっています。
    あとincludeとexcludeは–ではないでしょうか。

    どちらもその下の例では正しくなっていますが赤文字行をコピーして失敗したので一応ご報告まで。

  4. admin より:

    赤字箇所ですが、シンタックスハイライト以外の箇所で、特殊文字を含む場合は勝手に文字がエスケープされる関係で*が大文字になっていたりするかと思います

  5. tete より:

    素晴らしい記事ありがとうございます。
    最後の例について、コピー元 と コピー先 が逆になっている様です。

    > 例)/var/tmp/backup へ /home/log 以下のディレクトリ構造だけをコピーする。
    > $ rsync -avz –include “*/” –exclude “*” /var/tmp/backup /home/log

    $ rsync -avz –include “*/” –exclude “*” /home/log /var/tmp/backup
    が正しいと思われます! (^ ^)/

  6. admin より:

    ご指摘ありがとうございます。コピー元とコピー先が間違っている箇所は修正しました

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