到目前为止,我已经开始编写一个脚本了:
#!/bin/bash
for d in $(find /home/username/ -maxdepth 1)
do
if [[ $d == *.txt ]]
then
echo $d
fi
done
这执行预期,但我希望它给我的文件名,根据他们的文件大小从最大到最小。我已经找到了一些关于半相关问题的答案,并且看到了一些类似du和使用find的printf选项的东西,但是我还不能把它们拼凑在一起。
发布于 2018-12-27 17:19:03
find /home/username/ -name '*.txt' -maxdepth 1 -type f -printf "%s\t%p\n" |
sort -r -n -k1 |
cut -f2- |
while IFS= read -r file; do
echo "$file"
done
$line
变量echo "$line"
发布于 2018-12-27 17:17:53
使用stat
命令打印每个文件及其大小,然后输送到sort
。
stat -f '%z %N' /home/username/*.txt | sort -nr
如果不希望在输出中包含大小,则可以将其输送到cut
... | cut -d' ' -f2-
发布于 2018-12-27 17:17:29
你可以写:
ls -1 -S /home/username/*.txt
其中,-1
标志告诉ls
每一行打印一个文件,-S
标志告诉它按大小对文件进行排序(从最大到最小)。
这和您的代码之间有一些细微的区别(例如,这不会列出名字以.
开头的文件),但我猜这些差异都不是您关心的事情。(如果是的话,请详细说明您的要求。)
https://stackoverflow.com/questions/53952610
复制相似问题