我必须创建一个脚本,该脚本采用的参数应该是目录的名称。从那里它必须打印所有文件,然后打印出最大的文件及其大小。请帮忙!请问数组有ls -l
帮助吗?
yourfilenames=`ls $1`
for eachfile in $yourfilenames
do
echo $eachfile
done
答案1
您可以使用该du
命令获取特定文件的大小。
如果您想获取所有文件的输出,然后打印最大的文件,您可以使用以下命令:
find /path/to/yourDirectory/ -type f -exec du {} + | sort -rn | tee >(echo -e "\nThe largest one is: $(head -1)")
该命令find /path/to/yourDirectory/ -type f -exec du {} +
将获取大小仅文件的(子目录不会考虑打印其大小,仅考虑其文件)
输出sort -nr
将从最大文件到最小文件排序。
输出tee >(echo -e "\nThe largest one is: $(head -1)")
将被重定向到,stdout
并且也将被重定向到进程echo -e ...
,因此$(head -1)
将仅打印重定向输出的第一行,该行代表最大文件大小。
当你用这个打印时:echo -e "\nThe largest one is: $(head -1)"
输出将是这样的:
The largest one is: 736K ./path/to/yourdir/largestfilesize
正如您在上面看到的,尺寸打印在路径之前。如果你想获得大小之前的路径,你可以使用:
find /path/to/yourDirectory/ -type f -exec du {} + | sort -rn | \
tee >(echo -e "\nThe largest one is: $(head -1 | awk -v OFS=' ' '{print $2,$1}')")
如果你想获取文件大小人类可读的格式(4M、5G、3K 等),那么您应该使用正确的选项以该格式打印:
find /path/to/yourDirectory/ -type f -exec du -h {} + | sort -rh | \
tee >(echo -e "\nThe largest one is: $(head -1)")
#or
find /path/to/yourDirectory/ -type f -exec du -h {} + | sort -rh \
tee >(echo -e "\nThe largest one is: $(head -1 | awk -v OFS=' ' '{print $2,$1}')")
#du -h prints the file sizes in human readable format
#sort -h will sort the output comparing the human
#readable numbers (e.g., 4M,5G,3K, etc)