与 3 名高管一起寻找
Find with 3 execs
我写了这个命令:
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
文件中读取行。
它应该是什么样子?
我实际上会在 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
我也没有依赖du
的-t
标志,因为它只影响输出,不影响`du的状态码,所以我只是在[=中使用简单的算术比较18=] 代替。
尝试 find . -type d -size +500M
后,应用到目录的 -size
选项似乎没有检查其总文件大小。
搜索所需文件并检查其目录大小应该是更好的方法:
find . -type f -name 'meta' -execdir bash -c 's=$(du -sh .); [[ "${s%M*}" -gt "500" ]] && sed "1q" meta' \;
另一种方法是使用 -execdir:
find -name meta -type f -execdir bash -c 's=($(du -s .)) ; (( s > 2000 ))' \; -exec head -n1 {} \;
我写了这个命令:
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
文件中读取行。
它应该是什么样子?
我实际上会在 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
我也没有依赖du
的-t
标志,因为它只影响输出,不影响`du的状态码,所以我只是在[=中使用简单的算术比较18=] 代替。
尝试 find . -type d -size +500M
后,应用到目录的 -size
选项似乎没有检查其总文件大小。
搜索所需文件并检查其目录大小应该是更好的方法:
find . -type f -name 'meta' -execdir bash -c 's=$(du -sh .); [[ "${s%M*}" -gt "500" ]] && sed "1q" meta' \;
另一种方法是使用 -execdir:
find -name meta -type f -execdir bash -c 's=($(du -s .)) ; (( s > 2000 ))' \; -exec head -n1 {} \;