如何根据文件的上次编辑时间复制文件夹中的文件?假设我想复制我今天最后编辑从C:到我的文件夹巴克.我怎样才能实现这一点?
我知道常规复制命令可以像这样完成:
cp source destination
例如。
cp *.c bak
有什么建议么?
答案1
使用 find 可以找到过去一天修改的文件(仅限文件):
find . -type f -mtime 1
所以你可以用
find . -type f -mtime 1 -exec cp {} bak/ \;
意义:查找当前目录 ( .
) 下所有类型为“文件”的实体 ( -type f
),至少 1 天后修改(-mtime 1
,但它很微妙,请点击链接了解更多信息),并且对于其中的每一个,执行命令,cp
后跟与前面的条件匹配的文件的名称以及子句bak/
中的文字 --- exec
,结束分号(转义以避免被 shell 吃掉)关闭命令,另外意味着每次匹配都要执行一次该命令。
请注意,目录树将在bak/
文件夹中变平,因此使用存档格式可能会更好。
例如,这是我的脚本,它备份工作目录中今天和两天内修改的所有文件到 tar 文件中,然后将它们移动到我的 Dropbox 目录:
#! /bin/zsh
#
cd $HOME
today="today-$(hostname)".tar
twodays="twodays-$(hostname)".tar
mydirs=(bin Documents Templates texmf Desktop) # list your top-level working dirs here
rm -f $today $twodays
echo -n "Starting today and twodays backups... "
find $mydirs -type f -mtime -1 -exec tar rf $today {} +
find $mydirs -type f -mtime -2 -exec tar rf $twodays {} +
echo "backups done:"
ls -lh $today $twodays
echo "Moving to Dropbox"
mv $today $twodays $HOME/Dropbox
sleep 2
dropbox status
它需要,zsh
因为我很懒,并没有尝试适应的数组结构bash
,但这里肯定有人可以做到这一点(提示,提示)......