【问题标题】:linux find command operationlinux find命令操作
【发布时间】:2012-11-29 08:00:20
【问题描述】:

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

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

【问题讨论】:

    标签: linux find command


    【解决方案1】:

    试试

    find /var/www/html/zip/data/*/*/*/*/* -type f -mtime +90 -printf "%h\n" | sort | uniq 
    

    【讨论】:

    • 我不知道-printf 的使用范围有多广,但我的系统似乎没有它:(
    • 是否可以使用您建议的上述命令将唯一结果保存在变量中?
    • 当然,假设您使用的是 bash: var=$(find /var/www/html/zip/data/*/*/*/*/* -type f -mtime +90 - printf "%h\n" | 排序 | uniq);回声“$var”
    【解决方案2】:

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

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

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

    【讨论】:

    • 我错过了一件事,我也想将唯一路径保存在变量中
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      添加到 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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-05
        • 2012-10-28
        • 2017-11-27
        • 2012-03-14
        • 2016-09-26
        • 2014-03-12
        • 2017-04-14
        • 1970-01-01
        相关资源
        最近更新 更多