48 lines
1.3 KiB
Bash
Executable File
48 lines
1.3 KiB
Bash
Executable File
#!/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 \)
|