我的shell脚本找到90天以前的所有文件
find /var/www/html/zip/data/*/*/*/*/* -type f -mtime +90
返回输出,如
/var/www/html/zip/data/2011/jan/11/333333/Photos/a.jpeg
/var/www/html/zip/data/2011/jan/11/333333/Photos/b.jpeg
/var/www/html/zip/data/2011/jan/11/333333/Photos/c.jpeg
/var/www/html/zip/data/2011/feb/11/333333/Photos/a.jpeg
/var/www/html/zip/data/2011/feb/11/333333/Photos/b.jpeg
我需要做什么才能使用相同的Find命令从上面的输出中获取唯一文件夹路径,因此输出应为
/var/www/html/zip/data/2011/jan/11/333333/Photos
/var/www/html/zip/data/2011/feb/11/333333/Photos
所以我相信需要在上面的Find命令中添加一些内容,但不知道是什么
注意:我想在变量中保存唯一路径
答案 0 :(得分:3)
尝试
find /var/www/html/zip/data/*/*/*/*/* -type f -mtime +90 -printf "%h\n" | sort | uniq
答案 1 :(得分:1)
我不确定find
是否可以直接执行此操作,但您始终可以使用sed
对结果进行后期处理:
find /var/www/html/zip/data/*/*/*/*/* -type f -mtime +90 | sed 's|/[^/]*$||'
通过uniq
进一步管理结果应删除重复项(您可能需要先执行sort
,但我对此表示怀疑)。
答案 2 :(得分:0)
您可以通过这种方式找到解决方案
find /var/www/html/zip/data -type d -mtime +90 | uniq
这背后的想法是,每当文件夹中的文件被更新或修改时,文件夹也被标记为已修改。因此,在这种情况下,您将获得过去90天内未更新的所有文件夹...
答案 3 :(得分:0)
添加到jonathanasdf的答案,
您可以添加for循环,
$i=1;
for uniq_dir in `find /var/www/html/zip/data/*/*/*/*/* -type f -mtime +90 -printf "%h\n" | sort | uniq`;
do
a[$i]=$uniq_dir;
let "i = $i + 1";
done;