【问题标题】:Bash- find- permission denied stuck?Bash-find-权限被拒绝卡住了?
【发布时间】:2018-05-25 22:49:27
【问题描述】:

我正在尝试通过find 命令获取超过 3 天的文件(按修改日期,mtime)(我想在将来执行 rm 命令,不管为什么:D)。 问题是我不是 root 用户,当然,文件是混合的。 看起来,当出现第一个权限被拒绝消息时,简单的脚本会卡住。

#!/bin/sh
find /tmp* -type f -mtime +3 -group jenkins -print
# -exec rm {} \;

输出只是错误消息(由 root 用户拥有) find: ‘/tmp/systemd-private-dbe33161924b4616a037608d052f48d0-httpd.service-sFr4Wd’: Permission denied

注意- find 命令中应该出现许多文件:

    ll /tmp | less
    ....
    drwxr-xr-x 2 jenkins jenkins 4096 Dec 11 02:33 02a47e28-4254-45d4-b69d-ed33b9ef3bad
    drwxr-xr-x 2 jenkins jenkins 4096 Dec  6 15:10 03a1acc7-3040-430a-b5c3-9ce646407b93
    drwxr-xr-x 2 jenkins jenkins 4096 Dec  5 12:27 062eb875-3216-4b2a-bae2-66106b66b0cd
    drwxr-xr-x 2 jenkins jenkins 4096 Dec  9 06:51 0a6f8afc-0976-441b-980b-d0502f3903b1
    drwxr-xr-x 2 jenkins jenkins 4096 Dec  5 13:07 1512475627515-0
    drwxr-xr-x 2 jenkins jenkins 4096 Dec  5 13:07 1512475627836-0
    drwxr-xr-x 2 jenkins jenkins 4096 Dec  5 13:07 1512475629807-0
    drwxr-xr-x 2 jenkins jenkins 4096 Dec  5 13:07 1512475629829-0
    drwxr-xr-x 2 jenkins jenkins 4096 Dec  5 13:07 1512475629843-0
    .....
    -rw-rw-r-- 1 root    root     301 Dec  5 14:37 informix_disc.log
    -rw-rw-r-- 1 root    root     714 Dec  5 14:37 oracle_disc.log
    -rw-rw-r-- 1 root    root     602 Dec  5 14:37 sybase_disc.log
    drwx------ 3 root    root    4096 Nov 20 13:47 systemd-private-dbe33161924b4616a037608d052f48d0-httpd.service-sFr4Wd
    drwxr-xr-x 2 root    root    4096 Oct 30 09:39 vmware-config0
    drwxr-xr-x 2 root    root    4096 Nov 17 08:51 vmware-config1
...

我已尝试避免出现以下权限被拒绝消息:

 1. 2>/dev/null OR 2>&- (add on the end, error output to null redirect)
 2. find -type d ! -readable -prune -o ...  (exclude not readable folders)
 3. find /tmp* -type f -mtime +3 -group jenkins -print 2>&1 | grep -v "Permission denied" (should be same as above)
 4. find -user jenkins, as well as -user $(whoami)
 5. -perm -u+rwx

当我尝试将错误输出重定向到 /dev/null 时,命令输出为空白

请,

  • 是我做错了什么,还是在收到第一个权限被拒绝消息后卡住的原因是什么?
  • 有没有更好的简单方法来做我想做的事?
  • 有什么方法可以忽略不允许的文件夹并使其正常工作吗?

谢谢

【问题讨论】:

  • 感谢您将其标记为重复,但如果您阅读该问题,您会注意到,提到的解决方案不适用于我的情况 :) @Inian BTW 在标记的线程中他只想排除消息,我想让我的脚本工作:D
  • 您是否尝试过使用 -user 进行查找,所以您只需列出脚本正在运行的用户的文件?
  • 我在帖子上看不到重复的标志?这个stackoverflow.com/questions/762348/…呢?
  • 最近对 SO 有一些非常激动人心的近距离投票。为了帮助您,我建议将此问题重组为 “我如何 find -exec 仅在我有权访问的文件上”。确保你谷歌相同并首先阅读手册。我真的强烈建议在谷歌中输入find man linux,并在手册中搜索permissionsuser
  • 嗨@AndyM,当然我也尝试过 -user ,但结果是一样的,是的,脚本在“jenkins”用户下运行,我想删除创建和拥有的文件这个用户只有顺便说一句可以看到重复的标志,但如果你会阅读链接主题和我的帖子中的解决方案,建议的解决方案对我不起作用..在链接的帖子中,他们有烦人的消息问题,我的问题是它不会查找文件-由于某种原因,它可能卡在了权限消息上

标签: bash


【解决方案1】:

哦,问题可能是逻辑查找文件,我做了两个命令(分别查找目录和文件)

#!/bin/sh
find /tmp -user $(whoami) -type d -mtime +3 -exec rm -rf {} \;
find /tmp -user $(whoami) -type f -mtime +3 -exec rm -f {} \;

而且看起来效果很好,权限被拒绝消息仍然出现,但命令正在工作。

【讨论】:

  • 我很高兴您找到了解决方案,但我仍然对您最初的症状感到困惑:您确定命令卡住,而不是花费很长时间完成时间?
  • 它可能被卡住了,因为我得到的所有输出都被拒绝,并且消息周围没有列出任何文件。
猜你喜欢
  • 2016-01-15
  • 2011-08-20
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 2016-09-26
  • 2015-04-15
  • 1970-01-01
相关资源
最近更新 更多