スペースを含むファイル名のリストを検索から抽出します。

スペースを含むファイル名のリストを検索から抽出します。

特定のディレクトリにある特定の種類のすべてのファイルに対していくつかのタスクを実行したいと思います。私はbashスクリプトに次のように書きました。

HANDIN_FILES=`find . -type f -printf "%f\n" | head -20 `
for i in $HANDIN_FILES
do
  echo $i
done

最初のバージョンに。ファイル名にスペースが含まれていない場合は完全に機能します。ファイルがある場合は、silly name.txtファイルが最初に出てから次にiなります。これは私が望むものではありません。sillyname.txt

do ... doneコマンド-execのオプションにすべてを入れることができることを知っていますが、find後で使用するためにファイルリストをシェル変数に保存したいと思います。誰かがiループを一度繰り返して値を取得するためのクイック修正を提案できますか?silly name.txt

答え1

4.4+ バージョンbash:

readarray -td '' files < <(find . -type f -print0 | head -zn 20)
for i in "${files[@]}"; do
  something with "$i"
done

以前のバージョンのbashの場合:

files=()
while IFS= read -rd '' file; do
  files+=("$file")
done < <(find . -print0 | head -zn 20)

for i...

ここでは使いやすくなりますzsh

files=(**/*(D.[1,20]))
for i ($files) something with $i

(少なくともファイルリストは次のようにソートされます。上位20位もっと意味があります)

バラより検索結果を繰り返すのはなぜ悪い習慣ですか?出力を処理(または処理しない)するための追加のfind方法です。

関連情報