【发布时间】:2019-02-01 12:38:06
【问题描述】:
当我在 bash 中键入 ls 时,它应该默认按字母顺序检索文件和目录的名称。
不幸的是,我得到以下结果:
-- --- 00 -01 01 -02
我期待的结果是:
-- --- -01 -02 00 01
文件名中的- 字符会阻止默认排序正常工作。我需要使用与 php strcmp 相同的方法对文件名进行排序。
为什么- 字符会导致排序问题?是否有任何其他字符会导致问题? bash 中准确排序文件名的最佳方法是什么?
编辑
ls 命令在我的家用计算机上使用Manjaro 和我的备份服务器上使用ltfp 命令返回相同的错误结果。
在他的回答中建议使用LC_ALL=C ls -1 作为paxdiablo,在Majaro 上测试时有效,但在使用lftp 时没有运气:
echo $(lftp -e "set ftp:ssl-force true; set ssl:verify-certificate no; cd "$1"; LC_ALL=C ls" -u $username,$password $server)
编辑 - 已解决
在lftp,cls -l 得到正确的顺序和我需要的全部细节。
echo $(lftp -e "set ftp:ssl-force true; set ssl:verify-certificate no; cd "$1"; cls -l" -u $username,$password $server)
【问题讨论】:
-
@codeforester,这可能因为您的默认语言环境是
C,或其他按预期方式排序的语言环境。 -
我在家用计算机上使用“Manjaro”,但是,我在使用
lftp的备份服务器上执行ls命令。LC_ALL=C ls -1适用于 Majaro,但不适用于我的备用服务器lftp。 -
@DanBray 简要浏览一下 lftp 的手册页说“lftp 具有类似 shell 的命令语法”,所以我猜 shell-like 它实际上并没有给出你是一个完整的外壳,所以它不支持 LC_ALL=C 语法。您可能需要研究其他设置环境变量的方法。
-
顺便说一句,
echo $(lftp ...)语法是怎么回事,而不是仅仅运行lftp?这会产生一些非常不幸的副作用——例如,如果有人创建了一个名为* READ ME FIRST * .txt的本地文件,那么*s 将被替换为本地文件名。 -
请使用“添加答案”按钮添加您自己的答案,而不是将其编辑到问题中。