I have the following script working currently. The only thing I want to add is to somehow tell the script to find the files using the find and maxdepth variables and then move the files to a corresponding file structure.
example:
file test.txt exists in the /data/user1/upload directory
The script moves the file test.txt to a new filename (appends date/time)
The script also copies the file to /test/archive directory
I want the script to then move the file to the --parents /test directory
Or can I add a line outside of the script to the .sh and have it do this after?
Working script:
thetime=`date +%Y-%m-%d_%H:%M:%S` #
for i in *.*
do
[[ "$i" =~ \.filepart$ ]] && continue
extn=${i##*.} # save the extension of the file
mv "$i" "${i%.*}"$(date "+_%Y-%m-%d_%H:%M:%S.${extn}")
cp -p "$i" "${i%.*}"$(date "+_%Y-%m-%d_%H:%M:%S.${extn}") /test/archive
done
not sure I understand your find ... | xargs syntax. You seem to exclude files with dots in their names? And, the -p and --parent options to the mv command are unknown to me, as is the meaning of the \+ at the end.
what be the meaning of defining the thetime variable upfront if you then don't use it (running the risk of cp ing / mv ing to two different file names)?
Are you aware that your cp operation has no source file to work upon?
what be the sense of extracting the "extension" if - with your find command above - you operate on non-dotted files only?
This script looks at all files in a directory. If the extension has .filepart (partial upload) it skips that file. It appends the date/time to the original filename while maintaining the original extension.
Is there a command I can run that will search all subdirectories for any files and then move the files it finds to a new root location and maintain the same directory tree as the original path?
Example:
/data/user1/upload/test.txt
new location
/test/user1/upload/test.txt
something like find and then move
Thanks for the quick reply.
You should have a look at the rsync command, these paramters are of particular interest to you is:
-a recurse sub-folders and preserve permissions/owners --backup to backup existing files in destination folder before they are replaced with a new version --suffix to use date as the backup suffix --exclude=PATTERN to exclude .filepart files --remove-source-files to remove the source files after copying -v verbose output --dry-run just list what will be done without doing anything.
Here is a command the should be close to what you are after:
Remove --dry-run if you are happy with what will happen.
Note that --remove-source-files will only remove files and does not remove any directories so it can leave you with a number of empty directories in the source after it's done.
Only files that are different in source and destination (eg timestamp or contents) are copied, but --remove-source-files will still clean them up.
Files will only be renamed by --backup if they already exist in destination folder (i.e the 2nd time they are copied).
Remember to make a backup of your files before playing with this script!