我现在开始编写脚本,到目前为止已经掌握了
#!/bin/bash
for d in $(find /home/username/ -maxdepth 1)
do
if [[ $d == *.txt ]]
then
echo $d
fi
done
这按预期执行,但是我希望它根据文件的大小(从最大到最小)为我提供文件名。我已经找到了一些与半相关问题的答案,并看到了诸如du和使用find的printf选项之类的东西,但是我还无法将它们融合在一起。
答案 0 :(得分:3)
使用stat
命令打印每个文件及其大小,然后通过管道传输到sort
。
stat -f '%z %N' /home/username/*.txt | sort -nr
如果您不想在输出中包括大小,则可以通过管道传输到cut
:
... | cut -d' ' -f2-
答案 1 :(得分:1)
您可以写:
ls -1 -S /home/username/*.txt
其中-1
标志告诉ls
每行打印一个文件,而-S
标志告诉它按大小(从最大到最小)对文件排序。
此代码与您的代码之间有一些细微的差异(例如,这不会列出名称以.
开头的文件),但是我想这些差异与您所关心的无关。 (如果它们是 ,请详细说明您的要求。)
答案 2 :(得分:1)
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"