如何解决 sudo: 无法执行 /bin/ls: 参数列表太长

如何解决 sudo: 无法执行 /bin/ls: 参数列表太长

当我从 php 运行这个命令时

sudo -u db2inst1 ls -t /var/lib/edumate/bdrs/*/*/daily/*NODE* | sort -r

我收到sudo: unable to execute /bin/ls: Argument list too long

ls 列出了我们为每个客户提供的所有每日备份文件。客户在bdrs目录下有他们的目录。所以我猜想文件数量超过了允许的数量,因为它曾经正常工作。

有没有办法使用一个 shell 命令获取所有每日备份文件的列表?

答案1

将其转换为find,以便扩展的文件名不会出现在实际命令中(现在 shell 是“通配“这是你不想要的。

sudo -u db2inst1 find /var/lib/edumate/bdrs/ -ipath '/var/lib/edumate/bdrs/*/*/daily/*NODE*' | sort -r

答案2

使用 zsh 更容易。它是On 全局限定符将排序顺序更改为逆字典顺序。

sudo -u db2inst1 zsh -c 'print -l /var/lib/edumate/bdrs/*/*/daily/*NODE*(On)'

顺便说一句,传递-tto是没有意义的,因为您不关心它的排序顺序。ls

相关内容