根据linux中的修改日期复制文件

时间:2013-08-12 04:42:31

标签: linux bash cp

这可能是一个重复的问题,但我找不到解决方案,我想将最近3个月的文件从一个目录复制到另一个目录,但我只能通过使用以下命令找到列出文件。

find . -mtime -90 -ls

我真的不知道如何使用-mtime复制文件。我是linux新手,请帮助我。

5 个答案:

答案 0 :(得分:29)

使用-exec的{​​{1}}选项:

find

find . -mtime -90 -exec cp {} targetdir \; 会将-exec返回的每个结果复制到指定目录(上例中的find)。

答案 1 :(得分:4)

使用此命令:

for i in `ls -lrt | grep "jul" | awk '{print $9}' `; do cp $i* /some/folder/; done

答案 2 :(得分:4)

除了回到特定天数外,还可以选择确切的日期和时间

cp  `find . -type f -newermt '18 sep 2016 20:05:00'` FOLDER

上面将2016年9月18日20:05:00之后创建的目录中的所有文件复制到FOLDER(今天之前3个月):

小心使用find命令的符号,它不是这个:'' 就是这个,一个反击:` 日期选择是这样的:'

如果您的名称中包含空格,换行符,制表符或通配符的文件,您可以使用StéphaneChazelas的任一解决方案,首先是GNU,第二个是GNU或一些BSD:

find . -type f -newermt '18 sep 2016 20:05:00' -exec cp -t FOLDER {} + 
find . -type f -newermt '18 sep 2016 20:05:00' -exec sh -c 'cp "$@" FOLDER' sh {} +

答案 3 :(得分:3)

我想我会先暂时存储文件列表并使用循环。

find . -mtime -90 -ls >/tmp/copy.todo.txt

如果列表不是太大,你可以阅读

for f in `cat /tmp/copy.todo.txt`;
do echo $f;
done

注意:cat ...周围的引号是反引号,通常位于键盘的左上角

然后,您可以使用复制命令替换echo命令:

for f in `cat /tmp/copy.todo.txt`;
do cp $f /some/directory/
done

答案 4 :(得分:1)

Ex:选择日09/08/2017

ls -l
 -rw-rw-rw-    1    root     system          943   Aug   09   02:59  File

for j in `ls -l |awk '{ if ($7 == "09") print $9}'`
    do
        mv $j $Destination;
    done