如何解決 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

相關內容