Bor*_*jaX 17 linux bash filenames
我不确定这是否是在这里发布的“正确”问题。我可能更多地询问“意见”而不是实际的分类答案(那些要么有效要么无效,就是这样)。
我想知道什么名称分隔符对linux最友好(或者更具体地说,Bash 友好)同时对人类友好。
假设我想创建一个目录,其中包含与Mr. Foo Bar相关的内容(Foo是名字,Bar是姓氏)
有名字“ Foo-Bar/”很方便。-是一个“常规”字符,不需要转义,它清楚地表明Foo和Bar是两个独立的东西......很好。
现在,“ Foo.Bar”有点棘手。有人可能认为这Foo.Bar实际上是一个文件(乍一看,特别是如果您没有启用着色的终端),其中“ Foo”是文件名,“ Bar”是扩展名。
我也可以使用“ Foo Bar”,但是当我想访问目录时我需要转义空格,如果我想列出父目录的内容(所在Foo Bar的位置)并将所述列表放入 bash 数组中,则空白会引起麻烦(很多)。不太好。
括号()也会导致很多问题。它们还需要被转义,然后导致命令出现问题scp......不好。
所以......问题(最后)是:如果您需要使文件名一目了然且有意义,并且需要使用分隔符,您使用什么?
Joh*_*han 14
简短回答:“Foo_-_Bar”
长答案:
为了让事情更容易被发现,我倾向于在需要的地方使用一系列字符,这个想法是使用容易发现的东西,这样你就会知道这是分隔符,可能是“__”或“ ___”。
我使用它的一个实际示例是我的 mp3 集合,其中文件名包含艺术家和歌曲标题,有时还包含序列号。如果您使用魔术序列将它们分开,那么对于眼睛和脚本来说都很容易。mp3 示例看起来像这样。
现在,如果 Foo 和 Bar 是两个不应混合的逻辑事物,则可以将其转换为您的示例,那么这可能是 Foo_-_Bar。
有这么多你可能认为不应该是特殊的字符,实际上是特殊的,无论如何我只是使用特殊字符。这也让我养成了使用 bash 补全的好习惯,它会自动转义文件名中的所有特殊字符。但这也让我养成了转义/引用脚本中的所有内容和 bash 中的多部分 1-liners 的好习惯。
例如,在一个简单的 1-liner 中:
for file in *.txt; do something.sh "$file"; done
这样,即使其中一个文件有空格或其他一些字符,do循环部分仍会对其进行操作,并且不会错过 2 个或更多文件名部分,这可能会导致意外的副作用。
由于我无法控制我遇到的每个文件的空格/非空格命名,如果我尝试,它可能会在某处破坏一些符号链接,导致更多意想不到的后果,我只是希望所有文件名/目录名中都可以有空格,只需引用/转义所有变量即可进行补偿。
所以,然后我只在文件名中使用我想要的任何字符(通常是空格)。
我什至在 ZFS 数据集名称中使用空格,我不得不承认这在为我使用的 NAS 编写软件的开发人员中引起了相当多的头痛。
总结:空格不是无效字符,因此没有理由不使用它们。
-出于您上面提到的原因,我使用了破折号。我避免使用下划线,因为它们需要使用 shift 键,所以至少需要两倍的时间来输入(而且,我认为它们很丑)
与其他任何事情相比,我更倾向于为脚本文件名执行此操作 - 我想清楚地确定脚本的用途对我来说更为重要。文档文件只是惰性数据,但如果滥用脚本,则具有潜在危险。
| 归档时间: |
|
| 查看次数: |
10216 次 |
| 最近记录: |