有时我必须遍历目录中的所有文件才能找到一些东西,而通常情况下通常for i in $(ls *.txt)
会起作用。但是在某些情况下,文件夹中有太多文件并for
产生0403-027 The parameter list is too long.
(即for
,、、、或其他)。diff
ls
我找到了一种解决方案,即用 a 逐行读取输入,while read
但随之而来的是棘手的部分。起初,我认为理想是这样的:
while read file ; do
# do something with file
done < $(find . -type f -name *.txt)
但这会返回一行,填充^J
为分隔符(奇怪?),当然不会有这样的文件。更改IFS
为\n
也不起作用。
我当前的解决方法是使用我感兴趣的所有文件构建一个临时文件,然后使用 while:
tmpfile=$$.$(date +'%Y%m%d%k%M%S').tmp
find . -type f -name *.txt > $tmpfile
while read file ; do
# do something with file
done < $tmpfile ; rm $tmpfile
但这感觉不对,而且代码比第一个选项多得多。有人能告诉我执行第一个循环的正确方法吗?
谢谢!