
問題の原因は、複数行の改行を含むファイル名だったことがわかりました。 (どうやってこのようなことが起こったのかわかりません。)
find ~/x/y/ | shuf > ~/Desktop/z.txt
このコマンドは、「z.txt」ファイルの一部の空行を除いて、ほとんどが期待どおりに機能します。次の手順では、トップレベルのファイルを選択して開く必要があります。空の行は当然役に立たないため、これは不便です。なぜこれが起こるのか、そしてこの問題に対する「標準」ソリューション(いくつかのオプション?)があるのか、強力でシンプルなソリューション(空白行を削除するための追加コマンド?)があるのか疑問に思います。
答え1
出力ファイルに空白行が表示される理由はわかりませんが、ファイルに書き込む前に空白行をフィルタリングしてみることができます。
find ~/x/y/ | shuf | grep -v '^$' > ~/Desktop/z.txt
空白行のソースを追跡するには、find
個別に実行してみてください。
find ~/x/y/ > ~/Desktop/z.txt
空白行がありますかz.txt
?もしそうなら、おそらくfind
。
改行ターミネーターの代わりにゼロターミネーターを使用できます。リストから最初の項目を選択するときは、最初の文字から最初のNULL文字までのテキストを使用してください。
find ~/x/y/ -print0 | shuf -z > ~/Desktop/z.txt
答え2
shuf
空行は追加されないため、出力から出る必要がありますfind
。これは、名前に2つの連続した改行文字を含むファイルがディレクトリにあることを示します。彼らがコマンドを使用しているのを見ることができます
find ~/x/y/ -name '*
*' -print -exec echo '========'
または
find ~/x/y/ -name '*
*' -exec ls -q
コマンドを使用して改行文字を含むファイル名を処理するには、shuf
ヌルバイトを区切り文字として使用します。
find ~/x/y/ -print0 | shuf -z