27

我想将最近三个月的文件从一个目录复制到另一个目录,但我只能找到使用以下命令列出的文件。

find . -mtime -90 -ls

如何使用复制文件-mtime

4

5 回答 5

50

使用以下-exec选项find

find . -mtime -90 -exec cp {} targetdir \;

-exec会将返回的每个结果复制find到指定目录(targetdir在上面的示例中)。

于 2013-08-12T04:59:00.773 回答
12

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

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

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

请注意 find 命令的符号。不是这个:'

就是这个,一个反引号:`

日期选择是这样的:'

如果您的文件名称中包含空格、换行符、制表符或通配符,您可以使用 Stéphane Chazelas 的任一解决方案。第一个用于 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 {} +
于 2016-12-18T20:05:04.140 回答
6

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

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
于 2013-08-12T04:52:57.283 回答
5

使用这个命令:

for i in `ls -lrt | grep "jul" | awk '{print $9}' `; do cp $i* /some/folder/; done
于 2014-08-05T17:22:55.990 回答
2

示例:选择日期 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
于 2017-08-15T08:09:00.913 回答