我写了这个命令:
find -exec test -e "{}/meta" ";" -exec du -h -t 500M {} ";"
检查文件meta
是否在位,以及它的整个位置是否大于500MB。现在我想阅读这个meta
文件的第一行。我试过这个
find -exec test -e "{}/meta" ";" -exec test du -h -t 500M {} ";" -exec sed '1q;d' {}/meta ";"
或者
find -exec test -e "{}/meta" ";" -exec du -h -t 500M {} ";" -exec head -n 1 {}/meta ";"
但它会忽略du
并从每个meta
文件中读取一行
应该怎么样?
答案 0 :(得分:1)
我实际上会在bash中使用while
循环,就像那样:
find -type d | \
while IFS= read -r dir; do
if (($(du -ms -- "$dir" | cut -f1) >= 500)); then
[[ -e "$dir/meta" ]] && head -n1 "$dir/meta"
fi
done
我也不依赖于-t
的{{1}}标志,因为它只影响输出,而不是`du的状态代码,所以我只是在bash中使用简单的算术比较。< / p>
答案 1 :(得分:1)
尝试使用find . -type d -size +500M
后,似乎应用于目录的-size
选项不会检查其总文件大小。
搜索所需文件并检查其目录大小应该是更好的方法:
find . -type f -name 'meta' -execdir bash -c 's=$(du -sh .); [[ "${s%M*}" -gt "500" ]] && sed "1q" meta' \;
答案 2 :(得分:0)
另一种方法是使用-execdir:
find -name meta -type f -execdir bash -c 's=($(du -s .)) ; (( s > 2000 ))' \; -exec head -n1 {} \;