記事:
find_path=/var/log/ find $find_path -type f -mtime +90 -printf "%s\n" | perl -ne 'BEGIN{$sum=0;} {$sum+=$_;} END{printf("%d MB\n", $sum/1024/1024);}'
ファイル数が10万等多すぎるとls等の反応が無くなる場合がある。
# ファイル数の総数 ls -lf /path/to/dir/ | wc -l # ファイルの先頭100個まで表示 ls -lf /path/to/dir/ | head -n 100 # tmpから始まるファイルを削除 find . -type f -name 'tmp.*' -exec sleep 0.1 \; -print # 実際に削除: サーバの負荷をかけずに、ゆっくりファイルを消す。秒間10ファイル nohup nice find . -type f -name 'tmp.*' -exec sleep 0.1 \; -print -delete & # nohup.out 確認後削除
gzipは出力ファイル名を指定できない。
export DATETIME=$(date +%Y%m%d%H%M%S) find /var/log/ -type f -name '*.log' \ -exec mv {} {}-$DATETIME \; \ -exec gzip {}-$DATETIME \;
tarの引数としてコマンドラインをそのまま渡すと、ファイルが多い場合に失敗する。そのため標準入力として渡す。
sudo bash -c "find /var/log/ -type f -mtime -1 -follow \( -name 'messages*' -o -name 'secure*' \) | tar -cvz -T - --null -f logs.$(hostname -s).$(date +%Y%m%d-%H%M%S).tar.gz"
mkdir /tmp/logs tar xvfz logs.web01.20150616-063248.tar.gz -C /tmp/logs
find . -type d ! -perm 777 \ ! \( -path '*.svn*' -prune \) \ ! \( -path '*.CVS*' -prune \) \ ! \( -path '*.git*' -prune \) \ \( -name 'tmp' -or -name 'temp' -or -name 'cache' -or -name 'template_c' -or -name 'log' -or -name 'logs' \) \ -exec chmod 777 {} \;
ls -t $(find /tmp/ -type f -name "*.x86_64.rpm") | head -1
find . -type f -printf '%f\n'
find . -maxdepth 1 -type l
find . -xtype l
find /tmp/* -type f -mtime +5 -delete -o -empty -type d -delete
sudo find /var/log/ -mtime -1 -type f -follow | sort
# 拡張子が".log", ".bak", ".tmp", ".old" のファイルを検索 # emacs形式 find . -regex ".*\.\(log\|bak\|tmp\|old\)$" -type f # posix-egrep形式 find . -regextype posix-egrep -regex ".*\.(log|bak|tmp|old)$" -type f
find /var/log/ -name "*.log" -mmin -60 -type f -printf "%s\n" |awk '{sum += $1; printf("\r%d",sum/1024/1024) }; END{print""};'
5 5 * * * ( LOG_DIR=/var/log/test; /usr/bin/find $LOG_DIR -follow -name "*.log" -type f -mtime +1 -exec /bin/gzip {} \; ; /usr/bin/find $LOG_DIR -follow -name "*.gz" -type f -mtime +90 -delete; )
# 空のディレクトリを削除 find . -empty -type d -delete # ファイルの削除(-deleteオプションが無いバージョンもあるようだ) find . -name '*.log' -delete # 一つずつファイルを削除 find . -name '*.log' -exec rm {} \; # 「+」オプション。xargsのように複数指定 find . -name '*.log' -exec rm {} +
touch -t `date "+%m%d0000" --date "14 day ago"` /tmp/_start touch -t `date "+%m%d0000" --date "7 day ago"` /tmp/_end find -newer /tmp/_start -not -newer /tmp/_end
find -mtime -1 1日(24時間)前〜現在 find -mtime -3 3日(72時間)前〜現在 find -mtime 3 3日(72時間)前〜4日(96時間)前 find -mtime +3 4日(96時間)前〜過去 # テスト用ファイルを作成 touch -t `date "+%m%d%H%M" --date "60 min ago"` 60_min_ago.log touch -t `date "+%m%d%H%M" --date "1 day ago"` 1_day_ago.log touch -t `date "+%m%d%H%M" --date "2 day ago"` 2_day_ago.log # 70分以前のファイルを検索 find . -name '*.log' -type f -mmin +70 ./2_day_ago.log ./1_day_ago.log # 1日以前のファイルを検索 find . -name '*.log' -type f -mtime +1 ./2_day_ago.log
ln -s /home/user1/log /var/log/user1 # 通常 /home/user1/log 以下は表示されない find /var/log/ -name "*.log" # 表示される find /var/log/ -follow -name "*.log" # または find -L /var/log/ -name "*.log"
find /var/log -size +1M -print find /home -size 0c -print
find /etc/rc.d/init.d/ -name 'ip*' -exec basename {} \; | xargs -i sudo /sbin/service {} restart
find . -name "*.tmp" | xargs -i cp {} /tmp/
find . -perm 544 | xargs chmod 644
find . -perm 544 -exec chmod 644 {} \;
find . -type d -empty
find . -type d -empty -delete