如何列出文件的输出并让用户 select 他们

How can I list an output of files and let the user select them

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

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

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

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

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

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