这将导致LIST
变得非常大(甚至在短时间内增长几个 GB 等):
$ for i in *; do echo $i; cut -d ' ' -f1 $i ; done > LIST
例如,10秒后:
$ wc -l LIST
132654955 LIST
$ ls -hl LIST
-rw-r--r-- 1 user users 2.3G Jan 22 21:35 LIST
我认为原因是它LIST
被添加到应该处理的文件列表中并且cut
永远不会完成处理。我找到了这个问题的3个解决方案:
LIST
从处理中排除:for i in !(LIST); do echo $i; cut -d ' ' -f1 $i ; done > LIST
使用另一个目录
LIST
:for i in *; do echo $i; cut -d ' ' -f1 $i ; done > /tmp/LIST
*
在运行循环之前展开C-x *
或$ bind -p | grep glob-expand-word
显示任何内容
我的推理正确吗?哪种方法最好?
答案1
你的推理是正确的。
在您提出的解决方案中,我更喜欢前两个,特别是第二个,因为写入位于另一个目录中的文件似乎更干净。
这是使用变量的另一个选项GLOBIGNORE
(假设您的 shell 支持此选项):
GLOBIGNORE=LIST ## "LIST" file will be ignored while globbing
for i in *; do echo "$i"; cut -d ' ' -f1 "$i"; done >LIST
答案2
如果您对文件夹中的每个文件执行活动并将输出文件放在同一文件夹中,我认为这不是一个明智的方法。我的>
输出重定向总是以 结尾/tmp
,除非我知道那里没有足够的空间用于输出。然后我寻找更适合它的文件系统。但切勿将它们放在我处理输入文件的同一目录中。