In-place data transformations are performed on file data by moving data blocks from a source file into a temporary file and then from the temporary file into a destination file each time in a back to front fashion enabling truncation of the source file while the temporary file is being expanded and written into. Similar read, write, and truncate operations are performed between the temporary and destination files as well resulting in optimized use of available disk and/or memory space. An initial log file with information such as source file name, size, transformation type and direction is generated for recovery from a mid-transaction interruption. Based on a state (truncation, data content) of the temporary and source files, a status of data transfer prior to interruption is determined and remaining data transferred.