我尝试使用基于时间创建文件的 awk 过滤器将文件复制到目录
#!/bin/bash
dir=/home/resaputra23/pyexample/python2/*
des=/home/resaputra23/pyexample/backup/
file1= stat $dir | awk {'print $2'} | grep 2014
for i in $file1
do
cp $i $des || echo "unable to copy $i"
done
我得到输出
2014-12-02
2014-12-01
2014-12-28
但是$des中没有复制文件
答案1
尝试这个:
!/bin/bash
dir=/home/resaputra23/pyexample/python2/
des=/home/resaputra23/pyexample/backup/
#insert your prefered since date
sincedate="2015-01-01"
find $dir -newermt "$sincedate" > files.txt
while read files; do
cp $files $des
done < files.txt
rm -f files.txt
答案2
我建议使用find
。以下命令将选择并移动所有文件。
find "$Dir" -newermt "1 Jen 2014" ! -newermt "1 Jen 2015" -exec cp {} $Dest \;
再说几句:一般来说,有很多原因为什么最好避免解析 ls 的输出,主要是因为文件名中最终存在空格或特殊字符。
摘录自man find
,用于选项的使用-newerXY
-更新XY引用
将当前文件的时间戳与引用进行比较。引用参数通常是文件的名称(并且其中一个时间戳用于比较),但它也可能是描述绝对时间的字符串。X 和 Y 是其他字母的占位符,这些字母选择使用引用所属的哪个时间进行比较。
a The access time of the file reference
B The birth time of the file reference
c The inode status change time of reference
m The modification time of the file reference
t reference is interpreted directly as a time