按日期复制文件

按日期复制文件

如何根据文件的上次编辑时间复制文件夹中的文件?假设我想复制我今天最后编辑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,但这里肯定有人可以做到这一点(提示,提示)......

答案2

您可以首先使用命令指定当前文件夹中最后修改的文件

ls -lt

或者,你想指定最后使用命令访问的文件

ls -ltu

之后,您可以使用cp命令复制文件。有关复制多个文件,请参阅

相关内容