如何仅列出 tar 文件

如何仅列出 tar 文件

我有一个愚蠢的问题

usr01@srvlnx01:~$ sudo ls /var/opt/gitlab/backups/
1685014011_2023_05_25_13.2.3_gitlab_backup.tar  1685016443_2023_05_25_13.2.3_gitlab_backup.tar  tmp

usr01@srvlnx01:~$ sudo ls /var/opt/gitlab/backups/*.tar
ls: cannot access '/var/opt/gitlab/backups/*.tar': No such file or directory

我可能做了一些傻事。

答案1

通配符扩展由 shell 完成,而不是由 'ls' 完成。换句话说,它们不会等待 'sudo' 生效。

当你的 shell 没有权限查看受保护目录中的文件时,它无法扩展通配符,因此结果是要求 'ls' 显示文件字面上地命名*.tar。(如上所述,“ls”本身不进行通配符扩展。)

作为通用解决方案,首先让“sudo”运行 shell 的另一个副本 - 这将使用 root 权限处理通配符扩展:

sudo sh -c 'ls /var/bleh/*.tar'

sudo $SHELL -c '...'可能更通用,但是“sh”可以完成工作。)

某些程序可能有自己的选项,--include=...例如在程序本身中扩展通配符。不幸的是,“ls”只有--ignore='*.tar'但没有仅包含特定名称的选项。

答案2

另一个答案很好地告诉了你为什么你的特定解决方案不起作用,所以我就不重复这一点了。

应该使用像find

sudo find /var/opt/gitlab/backups -type f -name '*.tar'

注意,-type f因为它很重要,所以它确保只匹配文件。命名文件夹mydir.tar并没有什么不合法的,你的ls想法会匹配这样的目录。

相关内容