変更ファイルだけをtarballにする(git/sed/tar)

git管理しているディレクトリで修正されたファイルは、git statusで、すぐ確認できますが、
git管理していないディレクトリへコピーする時等、変更ファイルのみが必要になる時があります。
今回は変更ファイルのtarball化です。

まずはgit clone。(本ブログでも使用している、私が学習用で管理しているgitレポジトリです)

takk@deb83:~$ git clone https://github.com/takkete/bread.git
Cloning into 'bread'...
remote: Counting objects: 34, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 34 (delta 3), reused 0 (delta 0), pack-reused 17
Unpacking objects: 100% (34/34), done.
Checking connectivity... done.
takk@deb83:~$ cd bread

さっそく、たまたま修正したいファイルがあったので修正しました。内容は割愛します。

ではgit statusで変更されたファイルの一覧を確認します。

takk@deb83:~/bread$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   mcu/avr/attiny2313/makefile
	modified:   mcu/avr/attiny85/makefile

no changes added to commit (use "git add" and/or "git commit -a")
takk@deb83:~/bread$ 

ファイル一覧のみをsedで抽出します。

takk@deb83:~/bread$ 
takk@deb83:~/bread$ !! | sed -n 's/^.*modified:   \(.*\)$/\1/p'
git status | sed -n 's/^.*modified:   \(.*\)$/\1/p'
mcu/avr/attiny2313/makefile
mcu/avr/attiny85/makefile
takk@deb83:~/bread$ 

後はtarで固めるだけです。

takk@deb83:~/bread$ !! | xargs tar rf t.tar
git status | sed -n 's/^.*modified:   \(.*\)$/\1/p' | xargs tar rf t.tar
takk@deb83:~/bread$ tar tf t.tar
mcu/avr/attiny2313/makefile
mcu/avr/attiny85/makefile
takk@deb83:~/bread$ 

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA