find, tar, ssh を組み合わせワンライナーで利用する

提供:maruko2 Note.
移動: 案内, 検索

目次

検索条件に一致したファイル(ディレクトリ)を、foo.tgz に圧縮する

find 検索条件 -print0 | xargs -0 tar czf foo.tgz
  • find コマンドの -print0 オプションと、xargs コマンドの -0 オプションを組み合わせると、検索条件に一致したファイル(ディレクトリ)名にスペース・引用符・バックスラッシュなどが含まれていても適切に処理することができる。

ディレクトリ foo を、/path/to/dir ディレクトリにコピーする

tar cf - foo | (cd /path/to/dir ; tar xf - )
  • cp コマンドだとシンボリックリンクを再帰的にコピーしてしまうので、シンボリックリンクをそのまま維持させる場合は、tar コマンドを利用しコピーする。
  • () カッコ内のコマンドはサブシェルとして実行されるため、現在のシェル環境に影響を与えない。
[root@centos ~]# pwd
/root
[root@centos ~]# (cd /tmp ; pwd)
/tmp
[root@centos ~]# pwd
/root

ディレクトリ foo を remote_pc の /path/to/dir にコピー(書庫化)する

tar cf - foo | ssh root@remote_pc 'tar xf -C /path/to/dir'
tar cf - foo | ssh root@remote_pc 'cat > /path/to/foo.tar'
  • ローカルに書庫ファイルを作ること無く、直接リモートに書庫ファイルを作ることができる。
  • scp コマンドではなく、tarssh を組み合わせる理由は、scp コマンドは cp コマンドと同じくシンボリックリンクを再帰的にコピーしてしまうため。
  • tar コマンドに zj オプションを付け gzip, bzip2 圧縮することで、ネットワーク帯域を減らすこともできる。

検索条件に一致したファイル(ディレクトリ)を、remote_pc に書庫化(コピー)する

find 検索条件 -print0 | xargs -0 tar c | ssh root@remote_pc 'cat > /path/to/foo.tar'
scp `find 検索条件` root@remote_pc:/path/to/dir
  • 前述の find, tar の組み合わせと、tar, ssh の組み合わせをさらに組み合わせた方法。
  • ワンライナーで実行することで、ローカルに tar ファイルを作ること無く、直接リモートマシンに tar ファイルを作ることができる。
  • scp コマンドでも同じようなことができるが、検索条件に一致したファイル(ディレクトリ)名に、スペース・引用符・バックスラッシュなどが含まれていると、うまく動作しない。

remote_pc 内の検索条件に一致したファイル(ディレクトリ)を、ローカルに書庫化する

ssh root@remote_pc 'find 検索条件 -print0 | xargs -0 tar c' > out.tar

ワンライナーにすることで、リモートマシンのファイルをローカルに直接コピーすることができる。

参考サイト

LINEで送る このエントリーをはてなブックマークに追加
個人用ツール
名前空間
変種
表示
操作
案内
ツールボックス

注目のページ

このサイトのはてなブックマーク数