我的文件夹中我有文件,该文件的后缀时,例如创建此文件日期:file.log2012-08-21,file.log2012-08-20 ...现在我怎么可以移动文件,该文件是旧的,然后2012-08- 20? 我知道我能做到这一点天天: mv file.log2012-08-19 /old/
但我不知道何时停止......有一些参数命令MV做到这一点更容易?
Answer 1:
ls -l | awk '{print $NF}' | awk 'substr($0, length($0)-9, length($0)) < "2012-08-20" {system("mv "$0" /old/")}'
这将移动所有不是“2012-08-20”文件夹“/老”前辈的文件。 同样,你可以改变“2012-08-20”指定要特定的日期。 请注意,这假定该文件的后缀是一个日期戳,但前缀可以是任何名称。
如果你只需要移动超过一定天以上的文件,那么我认为rkyser的回答是更好。
Answer 2:
你可以使用find
与-mtime
参数。 这假定上面提到的文件后缀的文件的时间戳相匹配。
-
-mtime +1
意味着查找文件超过1日龄 -
-mtime -1
手段查找文件小于1日龄 -
-mtime 1
手段查找文件1日龄
实施例(更新):
find . -type f -mtime +1 -name "file.log*" -exec mv {} /old/ \;
或者,如果你只是想find
在当前目录中只添加-maxdepth 1
(否则,它会递归搜索):
find . -maxdepth 1 -type f -mtime +1 -name "file.log*" -exec mv {} /old/ \;
Answer 3:
假设你的日志文件的最后一行写后不会被修改:
find . ! -newer file.log2012-08-20 | xargs -r -IX mv X /old/
注意:使用此命令file.log2012-08-20将被移动为好。 如果你不想要它,使用以前的文件:
find . ! -newer file.log2012-08-19 | xargs -r -IX mv X /old/
Answer 4:
您可能需要编写一个小脚本这一点。 如果你的文件是在一个特定的命名约定一样file.log2012-08-21
,那么像这样的做的工作。
since=$(date --date="2012-08-20" +%s)
for file in `ls -1 --color=none`
do
date=$(date --date="${file#file.log}" +%s)
[ $date -lt $since ] && mv -v $file /old/
done
你真正做到这一点之前,它是改变mv命令来呼应,看是否要移动的文件是正确的一个好主意。
文章来源: How to move old file to another folder