小编dan*_*ann的帖子

仅列出当前目录中的常规文件(但不列出目录)

我可以ls -ld */用来列出当前目录中的所有目录条目。有没有类似的简单方法来列出当前目录中的所有常规文件?我知道我可以使用 find

find . -maxdepth 1 -type f
Run Code Online (Sandbox Code Playgroud)

或统计

stat -c "%F %n" * | grep "regular file" | cut -d' ' -f 3-
Run Code Online (Sandbox Code Playgroud)

但这些并没有让我觉得过于优雅。有没有一个很好的简短方法来只列出常规文件(我不关心设备、管道等)而不是当前目录的子目录?列出符号链接也是一个加分项,但不是必需的。

ls shell wildcards files

150
推荐指数
5
解决办法
36万
查看次数

快速计算日期差异

我经常想做一些快速的日期计算,例如:

  • 这两个日期有什么区别?
  • 在另一个日期之后n周是什么日期?

我通常打开日历并计算天数,但我认为应该有一个程序/脚本可以用来进行这些类型的计算。有什么建议?

date

118
推荐指数
8
解决办法
26万
查看次数

ulimit:硬限制和软限制之间的区别

ulimit 中的硬限制和软限制有什么区别?

对于打开文件的数量,我的软限制为 1024,硬限制为 10240。可以运行打开超过 1024 个文件的程序。什么是软限制?

open-files ulimit

104
推荐指数
1
解决办法
11万
查看次数

为什么 ls 排序会忽略非字母数字字符?

排序文件名时,ls忽略-,_. 我希望它也能在排序中使用这些字符。

一个例子:

touch a1 a2 a-1 a-2 a_1 a_2 a.1 a.2 a,1 a,2
Run Code Online (Sandbox Code Playgroud)

现在显示这些文件ls -1

a1
a_1
a-1
a,1
a.1
a2
a_2
a-2
a,2
a.2
Run Code Online (Sandbox Code Playgroud)

我期望的是这样的:

a1
a2
a,1
a,2
a.1
a.2
a_1
a_2
a-1
a-2
Run Code Online (Sandbox Code Playgroud)

即我希望在排序时考虑非字母数字字符。

谁能解释这种行为?这种行为是由标准强制要求的吗?或者这是因为编码是UTF-8?

更新:这似乎与 UTF-8 排序有关:

$ LC_COLLATE=C ls -1
a,1
a,2
a-1
a-2
a.1
a.2
a1
a2
a_1
a_2
Run Code Online (Sandbox Code Playgroud)

ls sort

29
推荐指数
2
解决办法
1万
查看次数

在命令行上转义正则表达式反斜杠所需的反斜杠数

我最近在命令行上遇到了一些正则表达式的问题,发现为了匹配反斜杠,可以使用不同数量的字符。这个数字取决于用于正则表达式的引用(无、单引号、双引号)。请参阅以下 bash 会话以了解我的意思:

echo "#ab\\cd" > file
grep -E ab\cd file
grep -E ab\\cd file
grep -E ab\\\cd file
grep -E ab\\\\cd file
#ab\cd
grep -E ab\\\\\cd file
#ab\cd
grep -E ab\\\\\\cd file
#ab\cd
grep -E ab\\\\\\\cd file
#ab\cd
grep -E ab\\\\\\\\cd file
grep -E "ab\cd" file
grep -E "ab\\cd" file
grep -E "ab\\\cd" file
#ab\cd
grep -E "ab\\\\cd" file
#ab\cd
grep -E "ab\\\\\cd" file
#ab\cd
grep -E "ab\\\\\\cd" file
#ab\cd
grep -E "ab\\\\\\\cd" file
grep -E 'ab\cd' file
grep …
Run Code Online (Sandbox Code Playgroud)

command-line shell quoting regular-expression

13
推荐指数
2
解决办法
1万
查看次数

在 Gentoo 中安全卸载软件包

我想卸载 Gentoo 中的特定软件包并浏览了emerge 手册页。我找到了--unmerge选项:

警告:此操作可以删除重要的包!删除所有匹配的包。这不会检查依赖关系,因此它可能会删除系统正常运行所需的包。它的参数可以是原子或 ebuilds。对于--unmerge的依赖感知版本 ,请使用--depclean--prune

但是,我想通过emerge来检查系统中任何其他已安装的软件包是否需要我要卸载的软件包。--depclean并且--prune不提供该功能:

  • --depclean 删除作为依赖项安装但不再需要的包
  • --prune “从您的系统中删除除最高安装版本之外的所有软件包”

没有依赖检查版本--unmerge吗?

gentoo software-installation package-management emerge

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

“test -n && echo not empty”打印“非空”。这是预期的行为吗?

当我执行以下行时

test -n && echo not empty
Run Code Online (Sandbox Code Playgroud)

它打印“非空”。当您有一个空变量时会发生这种情况,并在忘记引用该值时测试非空:

VAR=
test -n  $VAR  && echo wrong 1
test -n "$VAR" && echo wrong 2
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?

bash test

7
推荐指数
1
解决办法
646
查看次数

如何重新定义 kde4 键盘快捷键

我最近改用 KDE 4,我不喜欢 KDE 使用这么多 Ctrl-Fn 快捷键,因为我将它们用于其他目的。具体来说,我想在 KDE 中禁用 Ctrl-F4 快捷键。但是,我无法在系统设置 -> 快捷方式和手势中找到此快捷方式。

更新:我想重新定义的另一个快捷方式是“显示窗口菜单”快捷方式,我喜欢 Alt-Space,但 KDE 在 Alt-F3 上有。

我一直无法找到一个全局位置来更改所有快捷方式。

kde keyboard-shortcuts

5
推荐指数
1
解决办法
6730
查看次数

使用 compgen 自动完成文件名

作为我正在编写的更大的自动完成功能的一部分,我想使用 compgen 生成文件列表。我阅读了compgenand的 bash 手册条目complete,从那里我认为该选项-G "*"将是解决方案。但是,我无法让它工作:无论我的输入如何,都会显示当前目录中的文件列表,即:

$ cmd <Tab>
aa bb cc
$ cmd a<Tab>
aa bb cc
$ cmd aa<Tab>
aa bb cc
Run Code Online (Sandbox Code Playgroud)

因此,我尝试通过使用来调试它complete,它支持与 compgen 相同的选项,但我得到了相同的结果:

$ complete -G "*" cmd
$ cmd a<Tab>
aa bb cc
Run Code Online (Sandbox Code Playgroud)

我也试过complete -o filenames,但这也不起作用..

bash autocomplete compgen

5
推荐指数
1
解决办法
5576
查看次数

vi:将一行移动 4 个字节

我想使用 vi 编辑器将一行移动 4 个字节。我应该使用什么命令?

我试过“>>”,它确实移动了,但它移动了 8 个字节..

shell vi

4
推荐指数
2
解决办法
926
查看次数