linux find命令操作

时间:2012-11-29 08:00:21

标签: linux find command

我的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命令中添加一些内容,但不知道是什么

注意:我想在变量中保存唯一路径

4 个答案:

答案 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;