1

我的 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

4 回答 4

3

尝试

find /var/www/html/zip/data/*/*/*/*/* -type f -mtime +90 -printf "%h\n" | sort | uniq 
于 2012-11-29T08:06:01.737 回答
1

我不确定是否find可以直接执行此操作,但您始终可以使用sed对结果进行后处理:

find /var/www/html/zip/data/*/*/*/*/* -type f -mtime +90  | sed 's|/[^/]*$||'

将结果进一步传递uniq应该删除重复项(您可能需要先这样做sort,但我对此表示怀疑)。

于 2012-11-29T08:05:38.393 回答
0

您可以通过这种方式找到解决方案

find /var/www/html/zip/data -type d -mtime +90 | uniq

这背后的想法是,每当更新或修改文件夹内的文件时,文件夹也被标记为已修改。因此,在这种情况下,您将获得过去 90 天内未更新的所有文件夹...

于 2012-11-29T08:29:30.617 回答
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;
于 2012-11-29T08:30:56.413 回答