0

我必须做一个bash 脚本来显示磁盘使用情况和可用空间,如果将某个点设置为该脚本的参数,则允许用户选择大于 10MB 的文件并将它们删除或打包并将它们移动到其他地方并检查是否如果不重复该动作,则该点得到满足。到目前为止,为了列出所有/home/$USER中超过 10MB 的文件,我得到了这个命令行:

find . -size +10M -exec ls -Rla --block-size=M -I ".*" {} \+ | sort -n | awk '{print "PERM: " $1 " SIZE: " $5 " PATH: " $8}'

我遇到了一些严重的问题,比如avk没有整理出路径中带有空格的文件,并且如果没有小时值的文件也没有显示,因为列不匹配。我不知道为什么-I ".*" statemant 也不起作用。

所以我的问题是“是否可以在一个脚本中做到这一点 - 比如生成超过 10MB 的文件列表并让用户从中选择?”

4

1 回答 1

0

路径允许包含除零字节以外的任何字符。安全处理任何文件的唯一可能方法是使用零分隔流。请注意,您必须拥有 GNU 工具,因为它们支持各种-z/-0选项,或使用不同的编程语言。一个常见的技巧是在文件名之前放置已知格式的内容,然后放置文件名。这样您就可以使用正则表达式(或cut -d' ' -f2-)来提取它们。

find . -type f -size +10M -printf '%s %p\0' |
sort -z -n -k1 |
awk -v RS="\0" '
{
     # remove everything after the first space
     size = $0; gsub(/ .*$/, "", size)
     # remove everythign before the first space
     file = $0; gsub(/^[^ ]* /, "", file)
     print "SIZE: " size " PATH: " file
}'
于 2021-03-10T17:04:56.603 回答