【发布时间】:2013-08-12 04:42:31
【问题描述】:
我想将最近三个月的文件从一个目录复制到另一个目录,但我发现使用以下命令只能列出文件。
find . -mtime -90 -ls
如何使用-mtime复制文件?
【问题讨论】:
我想将最近三个月的文件从一个目录复制到另一个目录,但我发现使用以下命令只能列出文件。
find . -mtime -90 -ls
如何使用-mtime复制文件?
【问题讨论】:
为find 使用-exec 选项:
find . -mtime -90 -exec cp {} targetdir \;
-exec 会将find 返回的每个结果复制到指定目录(上例中为targetdir)。
【讨论】:
zshell。我所有的文件都消失了。我使用了mv 命令。
find . -type f time_criteria -exec mv -t target_dir {} +
除了返回特定天数之外,还可以选择确切的日期和时间:
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 或一些 BSDs:
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 {} +
【讨论】:
我会先临时存储文件列表并使用循环。
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
【讨论】:
使用这个命令:
for i in `ls -lrt | grep "jul" | awk '{print $9}' `; do cp $i* /some/folder/; done
【讨论】: