相关疑难解决方法(0)

为什么*不*解析`ls`(以及该怎么做)?

我一直看到引用此链接的答案明确指出“不要解析ls!” 这让我感到困扰有几个原因:

  1. 似乎该链接中的信息已被批量接受,几乎没有问题,尽管我可以在随意阅读中至少挑出一些错误。

  2. 该链接中所述的问题似乎也引发了不想找到解决方案的愿望。

从第一段:

...当你要求[ls]一个文件列表时,有一个大问题:Unix 允许文件名中的几乎任何字符,包括空格、换行符、逗号、管道符号,以及几乎任何你曾经尝试用作除 NUL 外的分隔符。...ls用换行符分隔文件名。这很好,直到您的文件名称中包含换行符。并且由于我不知道任何ls允许您使用 NUL 字符而不是换行符终止文件名的实现,这使我们无法使用ls.

无赖,对吧?如何以往我们可以处理一个换行符终止的上市数据集可能包含换行符的数据?好吧,如果这个网站上回答问题的人不是每天都做这种事情,我可能会认为我们遇到了麻烦。

事实是,大多数ls实现实际上提供了一个非常简单的 api 来解析它们的输出,我们一直在做,甚至没有意识到。您不仅可以以 null 结束文件名,还可以以 null 或您可能需要的任何其他任意字符串开头。更重要的是,您可以为每个文件类型分配这些任意字符串。请考虑:

LS_COLORS='lc=\0:rc=:ec=\0\0\0:fi=:di=:' ls -l --color=always | cat -A
total 4$
drwxr-xr-x 1 mikeserv mikeserv 0 Jul 10 01:05 ^@^@^@^@dir^@^@^@/$
-rw-r--r-- 1 mikeserv mikeserv 4 Jul 10 02:18 ^@file1^@^@^@$
-rw-r--r-- 1 mikeserv mikeserv 0 Jul 10 01:08 ^@file2^@^@^@$
-rw-r--r-- 1 mikeserv mikeserv 0 Jul …
Run Code Online (Sandbox Code Playgroud)

ls shell

249
推荐指数
8
解决办法
5万
查看次数

如何在查找结果中显示“人类可读”的文件大小?

我试图在我的 Centos 服务器上找到所有大文件。为此,我正在使用:

find / -maxdepth 10 -size +100000 -ls
Run Code Online (Sandbox Code Playgroud)

我尝试更改-ls为,-lsh但不允许。

如何以人类可读的尺寸显示这些结果(使用后缀 k、M、...)?

ls shell find

17
推荐指数
2
解决办法
5万
查看次数

如何正确转义单引号创建别名

我得到了这个单行代码来了解我的进程消耗了多少内存。

$ ps -u $USER -o pid,rss,command | \
    awk '{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'
Run Code Online (Sandbox Code Playgroud)

现在我想为该命令创建一个别名,但在转义'字符时遇到问题:

$ alias mm=ps -u $USER -o pid,rss,command | \
    awk '{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'
bash: alias: -u: not found
bash: alias: myuser: not found
bash: alias: -o: not found
bash: alias: pid,rss,command: not found
Total 0 MB
Run Code Online (Sandbox Code Playgroud)

我试图转义单引号,但仍然不起作用。

$ alias mm='ps -u $USER -o pid,rss,command | \
    awk \'{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}\''
> 
Run Code Online (Sandbox Code Playgroud)

你能帮我理解如何创建这个别名吗?

shell bash alias quoting escape-characters

11
推荐指数
3
解决办法
2万
查看次数

标签 统计

shell ×3

ls ×2

alias ×1

bash ×1

escape-characters ×1

find ×1

quoting ×1