我试图只备份一个由动态命名文件夹中的其他应用程序生成的文件。
例如:
parent_folder/
back_01 -> file_blabla.zip (timestam 2013.05.12)
back_02 -> file_blabla01.zip (timestam 2013.05.14)
back_03 -> file_blabla02.zip (timestam 2013.05.22)
我需要得到最新生成的zip文件,只要是最新的,只要文件名是最新的,就是一个zip文件,在“parent_folder”中就可以得到。
当我执行rsync时,文件夹结构+文件名被生成,我想省略我想备份文件夹中的文件,并用一个名称,这样我就知道哪里是最新的,而且它的名称总是相同的。
现在,我用perl来实现这一点,perl使用
"ls -tAF | grep '/$' | head -1"
执行rsync,但它确实带来了最后一个zip,但具有我不想要的文件夹结构,因为它没有覆盖我最新的zip文件。
rsync -rvtW --prune-empty-dirs --delay-updates --no-implied-dirs --modify-window=1 --include='*.zip' --exclude='*.*' --progress /source/ /myBackup/
如果不需要使用perl或任何其他脚本就可以完成rsync,那就太好了。
谢谢
最佳答案
文件名每次都不同?
这对于任何类型的同步都很难工作。
你能做的是:
在找到新文件夹的位置之外创建新文件夹,然后:
在开始删除该文件夹中的最后一个sym链接文件之前
找到文件时,即ls-tAF | grep'/$'| head-1。。。。
符号链接到此文件夹
然后rsync、ssh、unison文件跨到新节点。
如果symlink名称是file-latest.zip,则始终是
一个文件被发送过来。
但是,当你可以在这里查看scp时,为什么要这么做呢:
https://github.com/vahidhedayati/definedscp
对于更冗长的方法,而不是这种情况,但它使用真正的文件日期/时间戳,然后转换为秒。。。如果你想用一种不同的方式来做统计的话,这可能是有用的
使用stat计算文件,计算出最新的文件,然后简单地对其进行scp,下面是一些可以让您开始的内容:
一行:
scp $(find /path/to/parent_folder -name \*.zip -exec stat -t {} \;|awk '{print $1" "$13}'|sort -k2nr|head -n1|awk '{print $1}') remote_server:/path/to/name.zip
更冗长的方式,也许可以用来理解上面所说的:
#!/bin/bash
FOUND_ARRAY=()
cd parent_folder;
for file in $(find . -name \*.zip); do
ptime=$(stat -t $file|awk '{print $13}');
FOUND_ARRAY+=($file" "$ptime)
done
IFS=$'\n'
FOUND_FILE=$(echo "${FOUND_ARRAY[*]}" | sort -k2nr | head -n1|awk '{print $1}');
scp $FOUND_FILE remote_host:/backup/new_name.zip
关于linux - rsync备份动态文件夹中生成的一个文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16719499/