如何对文件名中的空格进行排序并连接文件?

rig*_*old 3 bash zsh filenames whitespace cat

我不幸地处理了包含空格的文件名。我想连接文件名包含空格的文件。我还想按数字对文件名进行排序。显然以下失败:

cat $(ls *.sql | sort -n)
Run Code Online (Sandbox Code Playgroud)

因为foo bar.sql作为两个参数传递给cat. 这里通常的方法是什么?

Sté*_*las 8

ls这里不需要。它是通过扩展*.sqlglob列出目录内容的 shell 。

在 GNU 或 FreeBSD 系统上:

printf '%s\0' *.sql | sort -nz | xargs -r0 cat --
Run Code Online (Sandbox Code Playgroud)

(使用\0而不是与\n一起-z/-0确保它也适用于包含换行符的文件名)。

请注意,数字排序-n假定数字位于文件名的开头。

或者,如果您有zsh

cat ./*.sql(.n)
Run Code Online (Sandbox Code Playgroud)

nglob 限定符是启用数字排序(当数字不在开头时也适用,前提是所有文件名都具有相同的前缀(如file12.sql, file2.sql)。我还添加.了仅包含常规文件。D如果您还想要隐藏文件,请添加喜欢.foo.sql)。