我有两个关于 Shell 脚本的问题。我正在做一个简单的脚本来显示大于作为参数传递的数字的文件列表。
find $1 -size +$2c -exec ls -lh {} \;| awk '{print $9 -> $5}'
其中$1
是根,$2
是大小,$9
分别$5
是文件名和大小。
第一个问题:有没有办法在没有根的情况下显示文件名?我只想要文件的名称。第二个问题:有没有办法,如果我不指定根,shell 脚本会采用实际的根?
您不能告诉ls
只打印文件的基本名称。但是,您可以使用打印大小和基本名称的-printf
操作:find
find $1 -size +$2c -printf "%f -> %s\n"
如果您想要人类可读格式的大小,一种方法是仅用于find
定位您想要的文件,然后打印每个结果的基本名称和大小:
find $1 -size +$2c | while read file; do echo $(basename "$file") "->" $(ls -lh "$file" | awk '{print $5}') ; done
编辑:
最后打印总计意味着在循环中建立总计:
#! /bin/bash
total=0
while read file; do
total=$(($total+$(ls -l "$file" | awk '{print $5}')))
echo $(basename "$file") "->" $(ls -lh "$file" | awk '{print $5}')
done < <(find $1 -size +$2c)
echo $total
听起来你想要这个basename
命令。
$ basename /foo/bar/bat/baz/whatever.txt
whatever.txt