将find命令的输出重定向到文件时出现问题

13
我想在 Unix Bash Shell 中将查找命令的结果写入文本文件。使用命令如下:
find ~/* -name "*.txt" -print > list_of_txt_files.list

然而,list_of_txt_files.list文件列表为空,我必须关闭该查找命令才能返回命令提示符。我的主目录中有许多txt文件。

或者,我该如何在命令行中将find命令的结果保存到文本文件中?我认为应该这样做:

3个回答

18

我会做的第一件事是使用单引号(有些shell会扩展通配符,但我认为bash默认情况下不会),而且find的第一个参数是一个目录,而不是文件列表:

find ~ -name '*.txt' -print > list_of_txt_files.list

除此以外,可能只是需要花费更长的时间,尽管我想象不出会有人有那么多文本文件(你说你有很多但必须相当庞大才能减慢find)。先尝试不进行重定向,看看它输出了什么:

find ~ -name '*.txt' -print

当我尝试使用命令并将输出重定向到文件时,我的计算机运行非常缓慢。由于计算机速度慢,重定向的输出变得非常缓慢- 即使几分钟后文件仍然是零字节,而不进行输出重定向,则*.txt文件会立即列出。现在我的计算机拥有更多资源,两种方式看起来都很快。 - harijay

8
您可以使用tee将输出同时重定向到文件和控制台。
find ~ -name '*.txt' -print | tee result.log

这将把输出重定向到控制台和文件,因此您不必猜测命令是否实际执行。

2
这是对我有效的方法。
find . -name '*.zip' -exec echo {} \\; > zips.out

这个方法可行,但只有在分号前加上单个反斜杠时才有效,使用 find (GNU findutils) 4.7.0-git - zek19

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接