提供: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 コマンドではなく、tar と ssh を組み合わせる理由は、scp コマンドは cp コマンドと同じくシンボリックリンクを再帰的にコピーしてしまうため。
tar コマンドに z や j オプションを付け 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
|
ワンライナーにすることで、リモートマシンのファイルをローカルに直接コピーすることができる。
|
参考サイト