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)
有什么建议?
使用 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
,但是这里肯定有人可以做到这一点(提示,提示)...
归档时间: |
|
查看次数: |
18318 次 |
最近记录: |