スペースを含むファイル名の処理に問題があります。ファイル名にスペースを含むファイルをリンクしたいです。また、ファイル名を数字でソートしたいと思います。明らかに、次は失敗します。
cat $(ls *.sql | sort -n)
以降はにfoo bar.sql
2つの引数として渡されますcat
。ここで一般的なアプローチは何ですか?
ベストアンサー1
ここでは必要ありませんls
。 globsを展開してディレクトリの内容を一覧表示するシェルです*.sql
。
GNUまたはFreeBSDシステムの場合:
printf '%s\0' *.sql | sort -nz | xargs -r0 cat --
(with\0
の代わりに改行文字を含むファイル名にも機能します)。\n
-z/-0
数値ソートでは、-n
数値がファイル名の先頭にあると仮定します。
または、次の場合zsh
:
cat ./*.sql(.n)
(glob修飾子は数値ソートを有効にするために使用されます(すべてのファイル名に同じプレフィックス(たとえば、、)が含まれてn
いる場合は数字が開始でない場合でも機能します。)、通常のファイルのみを含めるように追加しました。以下を追加してください。file12.sql
file2.sql
.
D
.foo.sql