按日期复制文件

Joh*_*ohn 3 command-line bash find cp

如何根据上次编辑文件的时间复制文件夹中的文件?假设我想将我今天上次编辑的所有文件从c:复制到我的文件夹bak。我怎样才能做到这一点?

我知道可以像这样完成常规复制命令:

cp source destination
Run Code Online (Sandbox Code Playgroud)

例如。

cp *.c bak
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Rma*_*ano 6

使用 find,可以通过以下方式找到在最后一天修改的文件(并且仅文件):

find . -type f -mtime 1 
Run Code Online (Sandbox Code Playgroud)

所以你可以复制它们

find . -type f -mtime 1  -exec cp {} bak/ \; 
Run Code Online (Sandbox Code Playgroud)

含义:找到当前目录 ( .)下的所有实体,类型为“文件” ( -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
Run Code Online (Sandbox Code Playgroud)

它需要,zsh因为我很懒惰并且没有尝试适应 的数组结构bash,但是这里肯定有人可以做到这一点(提示,提示)...