我想列出今年修改过的所有文件并备份它们。有人知道是否有命令可以列出它们吗?提前谢谢。
答案1
如果你想查找文件,该find
命令是一个强大的工具。你可以浏览目录并打印出符合某些测试的所有文件的路径:
# find all files in /some/directory whose name starts with 'project_b'
find /some/directory -iname 'project_b*'
# find all files in /some/directory which are owned by user 'joe'
find /some/directory -user joe
# find all files in /some/directory whose name starts with 'project_b'
# but which are *not* owned by user 'joe'
find /some/directory -iname 'project_b*' -and -not -user joe
要获取文件的最后修改日期(或更准确地说,文件内容的最后修改日期),您可以检查 mtime 时间戳。find
对 mtime 有一个测试:
# find all files, whose mtime is less than 365 days back
find /some/directory -mtime -365
到目前为止,这为您提供了要备份的所有文件的列表。现在来看看备份本身。find
带来了一个名为的选项-exec
,它将命令应用于它找到的每个文件:
find /some/directory -iname '*.txt' -exec cp {} /somewhere/else \;
如果 find 命令找到test.txt
、other.txt
和something.txt
,则该-exec
部分将执行:
cp test.txt /somewhere/else
cp other.txt /somehwere/else
cp something.txt /somewhere/else
您可能已经看到,该{}
文件已被替换为相关文件。
编辑:您可能需要找到一个比cp
备份本身更好的解决方案,因为cp
只需复制每个文件/somewhere/else
而不保留目录结构。
总的来说,专用的备份程序可能是更好的选择。
答案2
假设您想将日期限制在当前年份,您可以使用-newermt
日期。
这将在当前目录中查找 2016 年 11 月 1 日之后的任何文件,并将其复制到 /target,同时保持目录结构。
find . -newermt "2016-11-01 00:00:00" -exec cp --parents {} /target \;
cp 命令中添加的功能--parents
允许您复制文件并保留其所在的文件夹。
例如...
ubuntu@ubuntu-xenial:~$ ls
percona-release_0.1-4.xenial_all.deb t t2 testdir testfile2.vm testfile.vm
ubuntu@ubuntu-xenial:~$ cp --parents t/output.txt testdir/
ubuntu@ubuntu-xenial:~$ ls testdir/
directory2 t
当我复制t/output.txt
到它时,在其中testdir/
创建了文件夹,然后复制了文件。t
testdir/
答案3
列出今年修改的所有文件及其详细信息:
find / -mtime -365 -ls
这将列出过去 365 天的所有内容。
要仅显示常规文件,请添加-type f
到上述命令。
获取所有修改文件的列表(包含完整路径):
find / -mtime -365
cp
您可以使用或scp
等在任何地方备份这些文件。
添加-printf "%f\n"
到命令末尾以仅打印文件名。
答案4
我使用了一些别名
alias last-24-hours='sudo find * -ctime -1 -type f'
alias last-week='sudo find * -ctime -7 -type f'
你可以创建一个别名
alias last-year='sudo find * -ctime -365 -type f'
但它可能会产生一个很长的列表。
-o-
如果你想要图形概览,你可以使用猴面包树,查看哪里有大量数据(以及在备份之前可以“彻底清理”哪些地方)。
-o-
另一种方法是使用可以进行增量备份的工具,例如同步。它会自动查找备份中需要添加或替换的内容。