シェルスクリプトでディレクトリ配下を検索した結果を、フォルダ階層を保ったまま別ディレクトリにコピーする
Contents
はじめに
タイトルがわかりにくいので、早速、具体的な例を上げて説明します。
EC-CUBEのソースコードを拝借し、 Tag
という文字を名前に含むファイルを、階層構造を保ったまま別のフォルダ ( /tmp/ec-cube
) にコピーしてみます。
検証環境
準備
やりかた
Tag
という文字を名前に含むファイルは以下のコマンドで見つけられます。
これを階層構造を保ったまま /tmp/ec-cube
にコピーするには、 tar
コマンドを使います。
パット見わけがわからないが、なれます。(僕はなれはしないが、historyに残っているので流用しているw。)
コマンドの構成は、大きく2つの部分に別れています。
以下のように記述すると少しだけ見やすくなります。
- 1段目
find
で検索した結果を標準出力に流す。tar
コマンド は標準入力から対象ファイルを受け取り、圧縮。圧縮した結果を更に標準出力に流す。
- 2段目
- 展開対象のディレクトリに移動。
- 移動した先で標準入力から
tarball
データを受け取り、展開。
1段目 の find
コマンドのオプション -print0
と tar
コマンドの --null
は、今回のケースでは指定しなくても正常に動作します。
ファイル名やディレクトリ名にスペースが入っている場合にはこのオプションが必要です。find
の出力結果、 tar
の入力区切り文字としてデフォルトのスペースからヌル文字に変更してやる必要があります。
結果を確認してみる
応用編
find
コマンド実行箇所を変更すれば、別の条件で絞り込みを行うことが可能。
直近1日以内に変更が行われたものをコピー
ファイルサイズが100KB以上のものをコピー
Gitの変更履歴から直近2コミットで変更されたものをコピー
ひとこと
一部のファイルだけを人に渡したりするときに便利。
ディスカッション
コメント一覧
まだ、コメントがありません