我正在尝试仅备份由动态命名文件夹中的其他应用程序生成的一个文件。 例如:
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执行此操作,获取最新生成的文件夹
"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,那将会很棒。
谢谢
答案 0 :(得分:1)
文件名每次都会有所不同吗?
任何类型的同步都很难发挥作用。
你能做的是:
但是为什么你只能scp就能做到这一点,你可以看看这里:
https://github.com/vahidhedayati/definedscp 对于更长时间的缠绕方法,而不是这种情况,但它使用真实的文件日期/时间戳然后转换为秒...如果你想以不同的方式做统计可能是有用的
使用stat来计算文件,计算出最新的文件,然后简单地将其翻过来,这是让你入门的东西:
一个班轮:
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