findとxargsを使ったファイルのコピー

linux系OSで、findxargsを使って検索ヒットした複数のファイルを特定のディレクトリにコピーする方法のメモ。

先日購入したビデオカメラで、録画したデータをPCに移動しようとメモリ内を確認したところ、サブフォルダ(恐らく撮影日付単位)に整理されて保存されていた。単純に動画フォルダとイメージフォルダ直下に連番で保存されれば良いものを、とてもありがた迷惑。しかもMacの場合、Windowsのように検索フィルタした状態でファイルを複数選択ができない。結局最後はUnixコマンドに頼るしかなかった。

MAC OSX

find . -name (検索キーワード) | xargs -J% cp -p % (コピー先ディレクトリ)

Linux

find . -name (検索キーワード) | xargs -i cp -p {} (コピー先ディレクトリ)

例)カレントディレクトリ以下の、サブディレクトリ内にあるJPGファイルを検索して、/tempにコピーする

MAC OSX

find . -name *.JPG | xargs -J% cp -p % /temp

Linux

find . -name *.JPG | xargs -i cp -p {} /temp

cpコマンドの-pオプションはコピー元のタイムスタンプを可能な限り保持するスイッチ。注意点としては、Mac(BSD)はxargsオプションは、-Jに続けて置き換え文字(上記の場合は%)を指定する必要がある。