rig*_*old 3 bash zsh filenames whitespace cat
我不幸地处理了包含空格的文件名。我想连接文件名包含空格的文件。我还想按数字对文件名进行排序。显然以下失败:
cat $(ls *.sql | sort -n)
Run Code Online (Sandbox Code Playgroud)
因为foo bar.sql
作为两个参数传递给cat
. 这里通常的方法是什么?
ls
这里不需要。它是通过扩展*.sql
glob列出目录内容的 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)
(n
glob 限定符是启用数字排序(当数字不在开头时也适用,前提是所有文件名都具有相同的前缀(如file12.sql
, file2.sql
)。我还添加.
了仅包含常规文件。D
如果您还想要隐藏文件,请添加喜欢.foo.sql
)。