打印最大文件的名称和大小

打印最大文件的名称和大小

我必须创建一个脚本,该脚本采用的参数应该是目录的名称。从那里它必须打印所有文件,然后打印出最大的文件及其大小。请帮忙!请问数组有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)

相关内容