我需要制作某种hdguard脚本。我被卡住了,因为我必须列出所有可写普通类型文件的编号列表(没有链接目录等)。列表必须仅包含文件的名称和大小。然后,我必须选择要按数字删除的文件。
我尝试了各种echo
函数和ls
函数,但没有办法令我满意。
find
是我能找到的最接近的文件,但它不会在子目录和目录中显示文件(必须仅显示可写文件)。
所需的输出:
ls -Ss1pq --block-size=1
在我选择了“ 1”之后,脚本必须制作txt文件,并列出每个所选文件的路径。
所以,我有这个
1. [size] [filename]
2. [size2] [filename2]
...
越来越好
find /homee -type f -not -path '/\.*' |sort -r -n -k7
但是如何仅显示名称而不显示路径?
我也可以选择
find /homee -type f - ls -not -path '/\.*' -exec du -hs {} + |sort -r -n -k7
,但是现在没有文件大小 我该怎么办?
答案 0 :(得分:0)
将行号输入文件的一种非常简单的方法是在空字符串上使用grep -n
,如您所见:
Prompt> cat testtttt.txt
First line
Second line
Third line
Prompt> grep -n "" testtttt.txt
1:First line
2:Second line
3:Third line
-n
添加找到条目的行号,并通过搜索一个空字符串(可以在每行中找到)来获得一种行号。
答案 1 :(得分:0)
Bash 4+可以使用mapfile
从标准输入生成一个数组。 select
是用于生成菜单的工具。 Ctrl
+ D
退出。
mapfile -t Files < <(
find . -type f -not -path '*/\.*' \
-exec du -h {} + |sort -r
)
select f in "${Files[@]##*$'\t'}"; do rm -i "$f"; done
du
的输出是制表符分隔的,因此"${Files[@]##*$'\t'}"
:
${Files[@]}
-数组Files
${variable##pattern}
-从pattern
减去variable
的所有最左边出现的*$'\t'
-后跟文字标签的任何内容