よく作業用のディレクトリとかを一定期間ごとにtar(+gzip)でアーカイブしてあるのだが、たまに過去のデータを調べるためにそのアーカイブしたファイルの中を検索したい事があったりする。
そういった際にいちいちアーカイブを展開して調べるのは面倒なので、なんかいい方法が無いかなと考えていたところ、どうやらGNU tarだと「--to-command
」で指定したコマンドに対し、標準入力でtar内のファイルの中身を渡すことができるらしい。
なので、環境変数でtar内のどのファイルなのかも出力させることができる。
ただ標準入力から受け付けてるので、tar内のどのファイルに指定した文字列が含まれて...
Twitterでそんな感じの処理について書かれてたので、備忘で残しておく。
内容としては、tarで展開した後にファイルだけ頭に特定の文字列を追加するという内容。
GNU tarであればtransformオプションがあるから楽…ではあるのだが、Mac OSだとデフォルトではGNU tarは入ってないし、特定の条件下でないとうまく動作しない。
1. GNU tarの場合(特定の条件でのみ動作)
先程も書いたのだけど、GNU tarであれば --transform
オプションというのがあり、これを使うことでsedのような形式で置換処理を書くことができる。
scpを使う場合、サーバ側にもscpがインストールされて無いといけないのだけど、ごくたまにscpがインストールされていない場合がある。
そんなときは、以下のようにすることでsshコマンド経由でファイルのやり取りをすることができる。
単体ファイルの場合
cat file | ssh user@host 'cat > ./file' # リモートサーバにコピーする場合
ssh user@host 'cat ./file' | cat > ./file # リモートサーバからコピーする場合
諸事情があって、圧縮したアーカイブファイルを分割して補完しておく必要が出たので、その備忘。
といっても、そんな大した事やるわけではなく、昔からあるsplitコマンドでの手法。
Linux/UNIXの場合は、splitコマンドを使えばいい。
以下のようにコマンドを実行することで、ファイルを圧縮しながら分割保存させることが出来る。
tar czvf - /アーカイブ化するディレクトリ | split -d -b 分割するバイト数 - 分割後のファイル名(連番)
[root@localhost work_1]# ls -l /work_1/
合計 307200
-rw-r--r--....
Linux、UNIXでアーカイブファイルに関するコマンドといえば、やはりtarコマンドだろう。
アーカイブファイルとは、多数のファイルをそのユーザ・グループ情報やパーミッション、タイムスタンプ等の情報と共に、一つにまとめたファイルのことだ。ただのアーカイブファイルだと圧縮までは行われないため、通常はgzipと組み合わせて圧縮もさせる。
今回はこのtarを作成するtarコマンドについて、覚えておくと便利な使い方を紹介する。
なお、使用したのはCentOS 7にインストールされている以下のバージョンとなる。
[root@test-centos7 ~]# tar --version...
tarでアーカイブを作成する際、ディレクトリを指定してその配下全てをアーカイブ化することが多いだろう。
その中で、特定のサブディレクトリのみ除外してアーカイブを作成する場合は、「--exclude」オプションもしくは「-X」オプションを付与すると良いだろう。
1.「--exclude」オプション
コマンドラインで直接PATHを指定する場合は、「--exclude」オプションを付与する。
tar cvf 作成するアーカイブファイルPATH --exclude 除外ディレクトリのPATH アーカイブ対象ディレクトリ
[root@test-centos7 ~]# find /w...
LinuxやUNIXを利用していると、sshを経由して、ローカルのフォルダにあるファイルをアーカイブファイルとしてリモートサーバに配布したり、逆にリモート側のフォルダをアーカイブ化してローカルに配置したいときもあるだろう。
今回は、ローカル→リモートとリモート→ローカルでのtarを用いたフォルダの圧縮・解凍方法について記述する。
なお、ここではアーカイブファイルの形式は「tar.gz」とし、リモートサーバのIPアドレスを「192.168.0.240」としている。
1.【ローカル→リモート】ローカルでファイル・フォルダを圧縮し、リモートでアーカイブファイルとして保持させる
コマンドを実行...