tools/file_rewriter
2024-04-06 13:59:43 +03:00

48 lines
1.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Программа для переписывавания файлов по переданному пути на те же места
# полезно в некоторых файловых системах4 например ZFS, когда меняешь параметры сжати и дедупликации
# они не применяются на имеющиеся файлы и требуется перезаписать их в файловую систему
# При отмене процесса, проверить файл
export FILE_TMP_SUFFIX='file_rewriter'
export TMP_DIR='.'
export LOG_PATH='./file_rewriter.log'
export VERBOSE=0
while [ -n "$1" ]
do
case "$1" in
-t) export TMP_DIR=$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 -type f \( -print -exec bash -c '_rewrite_file "$0"' {} \; -o -quit \)