【Linux】findとxargsとmvで検索したファイルを任意のフォルダに移動する

findで検索した結果をそのままmv使って任意のディレクトリに移動したかったのでやってみた。

例えば、とあるフォルダを検索して、"/old/images/“内に移動する場合。

$ find ./ -name "*.gif" | xargs -i mv {} ./old/images/

これでらくらく入っちゃう!

【追記】 とある神様よりこれでは同じファイル名の画像があったら上書きされちゃうとのご指摘があったため、神様よりスクリプトをいただきました。

神様手抜き版(rsyncを使っちゃう。)

find ./ -path ./old/images -prune -o -type f -name '*.gif' | rsync --files-from=- -av . ./old/images/ && find ./ -path ./old/images -prune -o -type f -name '*.gif' -exec rm -v {} \;

神様手抜かない版。

find ./ -path ./old/images -prune -o -type f -name '*.gif' | egrep '\.gif$' | xargs -i ksh -c 'a=`dirname {}`;mkdir -pv ./old/images/$a;mv -v {} ./old/images/{}'

さすが神様、脱帽です!