You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅列出指定目录下的tar文件?执行ls通配符命令失败问题求助

如何仅列出指定目录下的tar文件?执行ls通配符命令失败问题求助

嗨,我来帮你捋清楚这个问题~你完全没做傻事,这其实是个很常见的shell权限与通配符展开的小坑!

问题原因

当你执行 sudo ls /var/opt/gitlab/backups/*.tar 时,通配符*.tar是由当前普通用户(usr01)的shell先处理的,而不是切换到root后再处理。但你的普通用户没有访问/var/opt/gitlab/backups/目录的权限,shell没法读取目录里的文件来展开通配符,只能把*.tar原样传给ls命令。此时root用户执行ls时,找不到名为*.tar的文件,自然就报错了。

而你直接执行 sudo ls /var/opt/gitlab/backups/ 能看到文件,是因为这个命令里没有通配符,ls由root执行后直接读取目录内容,不需要普通用户的shell提前处理,所以能正常显示。

解决办法

给你几个可行的方案:

  • 让root的shell处理通配符:通过sudo启动一个root的shell来执行命令,这样通配符会由有权限的root环境展开:
    sudo bash -c 'ls /var/opt/gitlab/backups/*.tar'
    
  • 先切换到root环境再执行:先进入root的交互式shell,再执行ls命令,避免通配符权限问题:
    sudo su -
    ls /var/opt/gitlab/backups/*.tar
    
    或者用sudo -i直接进入root环境,效果是一样的。
  • 用find命令替代:find命令可以直接由root执行,精准查找指定目录下的tar文件,还能避免通配符的问题:
    sudo find /var/opt/gitlab/backups/ -maxdepth 1 -type f -name "*.tar"
    
    其中-maxdepth 1表示只查找当前目录,不递归子目录;-type f确保只找文件(排除tmp目录)。

备注:内容来源于stack exchange,提问作者0___________

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 13:49:32