findで特定の見つけたファイル/ディレクトリを移動させる

Linuxコマンド弱弱プログラマなんですが必要になったのでちょっと調べてみました。

findコマンドで見つける

findコマンドは特定のファイルを見つけることのできるコマンドです。使い方はこんな感じ。

typeの部分はディレクトリかフォルダかの判定で-fにするとファイルが引っかかります。

find 探すディレクトリ -name "検索文字列" type -d

今回僕がやりたかったことはXcodeのAssetsの中にある.imagesetフォルダを抜き出したかったのでまずfindコマンドで見つけようとするとこんな感じになります。

Assetsフォルダの中にいる前提です。

find ./ -name "*.imageset" -type d

execオプションを使って検索結果を移動させる

findコマンドには-execコマンドというものがあるらしく、これを使うことで検索結果に対してコマンドを実行できるようです。

今回デスクトップにImageAssetsというフォルダを作成しそこに移動させてみました。

find ./ -name "*.imageset" -type d -exec mv {} //Users/harumidiv/Desktop/ImageAssets \;

移動先のパスだけ変更すれば使いまわせます。

画像だけ引っ張ってくる

XcodeのAssetsアイコン、色、画像などが含まれていますが、画像だけを抜き出したい時に邪魔になるのはアイコン画像です。

そのためアイコン画像の入っているフォルダを除外して.pngファイルを探します。

find . -type d -name "*.appiconset" -prune -o -type f -name '*.png' -exec mv {} //Users/harumidiv/Desktop/ImageAssets \;

2倍3倍の画像も抜いて画像だけを引っ張る

Xcodeで画像を入れる際に2倍3倍も設定している可能性もあるので1倍の画像だけをとるように場外することも可能です。

私のプロジェクトでは拡大画像の名前のお尻に@2x, @3xという規則性を持たせていたのでその名前のついているファイルを検索から除外することで対応することができました。

find . -type d -name "*.appiconset" -prune -o -not -name '*@2x.png' -not -name '*@3x.png' -type f -name '*.png' -exec mv {} //Users/h_sagawa/Desktop/ImageAssets \;