#!/bin/bash # Программа для переписывавания файлов по переданному пути на те же места # полезно в некоторых файловых системах4 например ZFS, когда меняешь параметры сжати и дедупликации # они не применяются на имеющиеся файлы и требуется перезаписать их в файловую систему # При отмене процесса, проверить файл export FILE_TMP_SUFFIX='file_rewriter' export TMP_DIR='.' export LOG_PATH='./file_rewriter.log' export VERBOSE=0 export FIND_OPTIONS='-type f' while [ -n "$1" ] do case "$1" in -t) export TMP_DIR=$2 shift ;; -o) export FIND_OPTIONS="$FIND_OPTIONS $2" shift ;; -v) export VERBOSE=1 ;; --) shift break ;; *) echo "Invalid option $1" exit 1 ;; esac shift done _exit_error () { echo "Error cmd: $1" exit 2 } export -f _exit_error _rewrite_file () { trap '' SIGINT TMP_PATH=${1}_${FILE_TMP_SUFFIX} ORIG_PATH=$1 cmd="cp -p $ORIG_PATH $TMP_DIR/fr_tmp && mv -f $TMP_DIR/fr_tmp $ORIG_PATH" if [[ $VERBOSE == 1 ]] then echo $cmd fi echo `date "+%Y-%m-%d %H:%M:%S": ` $cmd >> $LOG_PATH eval $cmd || exit 2 trap - SIGINT return 0 } export -f _rewrite_file find $1 $FIND_OPTIONS \( -print -exec bash -c '_rewrite_file "$0"' {} \; -o -quit \)