查找所有文件 - 管道输出时不输出此类设备错误

时间:2014-06-26 18:22:42

标签: linux bash find

我编写了一个简短的bash脚本来查找目录及其子目录中的所有文件,根据大小对它们进行排序,并只输出前10行。脚本的内容如下:

find . -type f -printf "%s %p\n" | sort -nr | head -n $lines | cut -d' ' -f2 | xargs du -aSh
total=`du -h | tail -n 1 | cut -f1`

第二行输出总大小。我刚才写过这篇文章,实际上我不记得为什么我最后用du来输出每个文件。

这个脚本在我的家里运行正常,但是当我尝试在我的工作空间中运行它时,我得到以下输出并且脚本冻结,迫使我转到Cntl-C:

  

find:./。OldFiles / .OldFiles:没有这样的设备

在我的工作空间中,有一个.OldFiles目录,每24小时更新一次。 ls -a不会显示它。我认为它是另一个空间的链接,但不知何故发现它正在绊倒.OldFiles / .OldFiles。编辑:.OldFiles实际上是一个挂载的文件系统,而不是链接。

find . -type f -printf "%s %p\n"

这可以在命令行中找到,但管道似乎是发生错误的地方:

find . -type f -printf "%s %p\n" | sort -nr

会失败。

我尝试在.OldFiles路径上使用排除,但我得到相同的输出:

>find . -type f ! -path "*.OldFiles/*"
find: ./.OldFiles/.OldFiles: No such device

任何人都可以帮助我吗?我无法找到解决这个问题的方法。

1 个答案:

答案 0 :(得分:1)

您不只是想要否定路径,因为find会继续检查其子目录,您希望-prune它。

所以尝试这样的事情

find . -path './.OldFiles' -prune -o -type f -print 

以逻辑方式对待

find . (-path './.OldFiles' AND -prune) OR (-type f AND -print)