Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2833

指定されたディレクトリから指定サイズのみ移動したい場合のスクリプト

$
0
0
動機 ファイルを移動・整理する際の、「移動先の容量を調べ、移動元から必要なサイズのみファイルを取り出す」作業が面倒なため コマンド mvl /path/to/source /path/to/destination (転送サイズ 例:10G) (findの転送オプション -type fはデフォルトで指定済) mvl #!/bin/bash BASEDIR=$1 DISTDIR=$2 LIMITSIZE_HR=$3 LIMITSIZE=`numfmt --from=iec $LIMITSIZE_HR` FINDARGS=${@:4} DISTFREE=$(( `df --output=avail $DISTDIR | sed 1d` * 1024)) #dfの先頭行を除去 DISTFREE_HR=`numfmt --to=iec $DISTFREE` TOTAL=0 while read -r file; do FILESIZE=`wc -c < "$file"` #ファイルサイズだけを取得 TOTAL=$((TOTAL + FILESIZE )) #移動予定のファイルを合計予定サイズに加える TOTAL_HR=`numfmt --to=iec $TOTAL` #合計予定サイズが残り空き容量以下、かつ指定転送量以下の場合のみ移動を実施 if [ $TOTAL -gt $DISTFREE ]; then echo "Don't Enough FreeSpace $TOTAL_HR > $DISTFREE_HR" break fi if [ $TOTAL -gt $LIMITSIZE ]; then echo "over $TOTAL_HR > $LIMITSIZE_HR" break fi echo "MOVE $file to $DISTDIR (TransferTotal:$TOTAL_HR)" mv "$file" $DISTDIR DISTFREE=$(( `df --output=avail $DISTDIR | sed 1d` * 1024)) #空き容量を更新 DISTFREE_HR=`numfmt --to=iec $DISTFREE` done <<< "$(find $BASEDIR -type f $FINDARGS)" 仕様 findの検索された順に処理する コピー先にコピー予定のファイルが収まらない、または指定した転送サイズ以上になる場合は処理を終了。後続の転送可能なサイズのファイルを探すことはしない。 ソースディレクトリのフォルダ構造は再現しない 感想 ファイルサイズ制限を相互の変換する「numfmt」を初めて知った

Viewing all articles
Browse latest Browse all 2833

Latest Images

Trending Articles