« uncachable でも polipo がキャッシュ作るバグ | ホーム | Yosemiteアップデートでlaunchdが死亡した »
2014年8月29日
検索条件に一致するファイルを他所にコピーしてからシンボリックリンクに置き換えるシェルスクリプト
iTunesでPodcastを結構な数購読しているんだけど、これが何年も溜まってそれなりに容量を喰うようになってしまった。MacBook AirのSSDだとちょっとバカにならない。じゃあNASに移そうとなったものの、あっちこっちにPCを持ち運んで使う関係上、iTunesフォルダ自体をNASに置くのはちょっと都合が悪いし嫌な感じだった。
→更新日時の古いPodcastだけをNASにコピーして、シンボリックリンクに置き換えてしまえばいいんでない?
というわけで表題のシェルスクリプト書いた。
具体的な動作は、ディレクトリAにfindコマンド(オプション指定可)を実行してヒットしたファイルをディレクトリBに階層ごとコピー。その後、AのファイルをBへのシンボリックリンクに置き換える。
なお手元のMac OS X 10.9.4でしか試していない。
階層を保ったコピーはcpioで出来そうだったので使ってみたけどよくわかってない。GNU版のcpコマンド入れて--parentsオプションにしたほうがいいんですかね?
$ ./cp_and_replace.sh -h
Description:
source 以下の検索条件に一致するファイルを destination に階層ごとコピーして元ファイルはシンボリックリンクに置き換える
Usage:
cp_and_replace.sh SOURCE-DIR DESTINATION-DIR [option] [-find <find-options>]
Options:
-h, --help
-v, --version
-d, --debug bash set -x
-find <find-options> find command options (Defult: -mtime +30)
実行するとこんな感じ。
$ ./cp_and_replace.sh ~/Music/iTunes/iTunes\ Media/Podcasts ~/hanpen/Multimedia/iTunes/Podcasts -find -mtime +10
Timestamp Filepath
20140812 @IDA_10 x @miyaokaのピコピコキャスト/第5回 アメリカで焚き火を囲むトーク.mp3
20140812 @IDA_10 x @miyaokaのピコピコキャスト/第6回 アメリカ生活振り返りトーク.mp3
20140812 @IDA_10 x @miyaokaのピコピコキャスト/第7回 ポケモンの陰謀 - 人類滅亡計画の真実とは!_.mp3
----
find command: find * -type f ! -name .DS_Store ! -name ._* -mtime +10
source: /Users/retlet/Music/iTunes/iTunes Media/Podcasts
destination: /Users/retlet/hanpen/Multimedia/iTunes/Podcasts
----
copying and replacing files ? [y/n]
検索結果とfindコマンドの内容、指定ディレクトリが表示されるので、コピー開始してもよければ y を入力してエンター。コピー完了したファイルからシンボリックリンクに置き換える。
コピーに失敗した場合はシンボリックリンクへの置き換えをせずにそこで終了するので、ネットワークエラーとかで止まってしまった場合はもう一度同じコマンドを実行すれば止まったところから再開できるはず。
ちなみに最初試したとき、iTunes上で再生できなくなったんだけどMacごと再起動したら直ったのでなんか怪しかったら再起動するといいと思う。
参考にしました
- 使いやすいシェルスクリプトを書く | SOTA
- bash によるオプション解析 - Qiita
- Bash - パイプ出力を**現在のシェル**上のwhileに喰わせる上手いやり方 - Qiita
- 対話型シェルスクリプト サンプル
- cpio - Wikipedia
- case 文の使用方法 - UNIX & Linux コマンド・シェルスクリプト リファレンス
- 引数を処理する - UNIX & Linux コマンド・シェルスクリプト リファレンス
- 変数が未定義かどうか判別する - わからん
- Bash - シェルスクリプトを書くときはset -euしておく - Qiita
- findコマンドのmtimeオプションについて
トラックバック(0)
トラックバックURL: http://retlet.net/cgi-bin/mt5/mt-tb.cgi/95