如何使几乎所有的 Linux 文件管理(例如查找、自动完成等)不区分大小写,但其 shell/Bash 复制和移动命令“cp”、“mv”区分大小写?
答案1
您提到查找文件和自动完成例子您希望不区分大小写的地方,但即使这些是仅有的不区分大小写的内容(特别是find
命令和 shell 的 tab 补全),你几乎可以获得所有效果最多当您希望从 shell 执行的操作不区分大小写时,它们将不区分大小写。
原因是在 shell 中输入文件名主要有三种情况:
- 该文件存在并且其位置已知。然后您只需输入其路径即可。在输入唯一前缀后,您可以按Tab。如果您已将 shell 中的制表符补全重新配置为不区分大小写,则按下Tab会将您输入的大小写更改为实际文件的大小写。这既适用于部分路径/文件名,也适用于与实际文件大小写不同的完整路径/文件名。
- 该文件存在但其位置未知。然后你正在寻找该文件。如果你使用
find
它,你可以告诉它不区分大小写地搜索。通常这包括-name
用测试代替-iname
测试。 - 该文件尚不存在,但您打算创建它。在这种情况下,您必须输入您想要的大小写文件名,而不管是否设置为区分大小写。(不过,您可以从 shell 的制表符补全中受益,因为它适用于任何已存在的路径前缀。)
虽然/bin/sh
Ubuntu 中提供了dash
,但默认用户 shell(非图形登录或打开终端时获得的 shell)是bash
。大多数 Ubuntu 用户使用bash
。因为它是 Ubuntu 中最流行的 shell,而且您已标记此问题狂欢,我猜你会使用它。请注意,让另一个 shell(例如)使用不区分大小写的制表符补全的方式zsh
通常是不同的(有些 shell 不能,或者根本没有制表符补全)。
我建议你这样做bash
首先执行不区分大小写的制表符补全试试看在当前正在运行的 shell 中运行以下命令:
bind 'set completion-ignore-case on'
运行该命令后,命令名称及其文件名参数的名称均会进行不区分大小写的制表符补全。尽管这做适用于 和 等命令cp
,mv
它仅在您按下Tab执行补全时发生。命令中出现的任何文本(无论是您编写的还是通过制表符补全生成的)都是解析命令参数的文本。因此您始终有充分而高效控制什么是不区分大小写的。
我并不认为这是唯一的或理想的解决方案,但它是一种非常通用且安全的解决方案。(您最终可能希望通过为不希望区分大小写的命令编写自定义规则来进一步自定义制表符补全。)
在你尝试了不区分大小写的制表符补全并决定始终使用它之后,您可以永久启用它(或直到您决定撤消更改),只需将同一bind
行添加到文件末尾即可~/.bashrc
。init3说您可以使用 shell 命令或文本编辑器执行此操作:
echo "bind 'set completion-ignore-case on'" >> ~/.bashrc
或者只需使用您最喜欢的文本编辑器添加该行即可。重新启动您的 bash 会话并享受。
(这是来自 init3 的回答我可以让 Bash 中的 Tab 自动完成不区分大小写吗?bash
如果您有兴趣,该问题显示了一些其他方法来启用不区分大小写的制表符补全。)