如何在 Linux 中复制 Windows 名称排序?

如何在 Linux 中复制 Windows 名称排序?

我需要将文件列表按照 Windows 资源管理器字母排序中显示的顺序打印到文本文档中,但我找不到任何ls | sort显示完全相同顺序的排序方法。

以括号开头的文件首先显示在 Windows 资源管理器中,然后是数字,然后是字母,但每次我尝试时,它似乎总是按忽略括号的顺序排列它们。

答案1

这是一个快速而简单的方法,我将稍微解释一下以帮助您开始:

我在测试目录中创建了一些文件,其名称中包含括号、数字和字母:

ls -la 
.
..
1.file
2.file
[1].file
[2].file
one.file
two.file

如果我将 ls 管道连接到 sort,它们将以相同的方式排序。我能做的是,首先只列出目录中包含括号的文件(将 ls 管道连接到 grep 并专门查找 [),然后在排序后将其写入文件,第二步列出目录,排除所有带括号的文件(grep -v),然后将其附加到先前创建的文件中。在这里我在父目录中执行此操作,以避免将我创建的文件(list.txt)包含在结果中。

 ls | grep [[] | sort > ../list.txt && ls | grep -v [[] | sort >> ../list.txt; cat ../list.txt
[1].file
[2].file
1.file
2.file
one.file
two.file

我将 [ 放在括号中,因为它们需要转义,否则 shell 会因为您没有关闭它们(并在括号内给出它期望的排序指令)而变得烦躁。根据您拥有的目录和文件名结构的复杂程度,这可能是一个快速而粗糙的单行修复。如果它变得复杂,请查看 SED 和 AWK。

相关内容