我编写了一个简短的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
任何人都可以帮助我吗?我无法找到解决这个问题的方法。
答案 0 :(得分:1)
您不只是想要否定路径,因为find
会继续检查其子目录,您希望-prune
它。
所以尝试这样的事情
find . -path './.OldFiles' -prune -o -type f -print
以逻辑方式对待
find . (-path './.OldFiles' AND -prune) OR (-type f AND -print)