findで検索したファイル群のディレクトリ構造を保ったままコピーする

例えば30日以内に更新された/etc以下のファイルをバックアップの為、別のディレクトリにコピーしたいというような欲求があります。

30日以内に更新された/etc以下のファイルのリストはfindコマンドで得られます。

$ find /etc -mtime -30
/etc
/etc/sysconfig/hwconf
/etc/prelink.cache
/etc/reader.conf
/etc/aliases.db
/etc/mtab
/etc/hosts
/etc/printcap
/etc/adjtime
/etc/ld.so.cache
/etc/lvm/cache
/etc/lvm/cache/.cache

問題は、この結果をディレクトリ構造を保ったまま別のディレクトリにコピーしたいという事なのですが,cpコマンドのmanを見ていると、入力時に与えられたパスを保存する-Pオプションが見つかりました。これをxargsでつなげると以下になります。

# 30日以内に更新された/etc以下のファイル群を
# ディレクトリ構造を保ったまま/backup_dirにコピー
find /etc -mtime -30 | xargs -iX cp -P X /backup_dir

find + xargs + grepでlinux使えてる感!僕だけですか、そうですか。

Leave a Reply

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