Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 根据大小对子目录中的每个文件进行处理_Bash - Fatal编程技术网

Bash 根据大小对子目录中的每个文件进行处理

Bash 根据大小对子目录中的每个文件进行处理,bash,Bash,我正在开始编写一个脚本,到目前为止: #!/bin/bash for d in $(find /home/username/ -maxdepth 1) do if [[ $d == *.txt ]] then echo $d fi done 这将按预期执行,但是我希望它根据文件大小从大到小为我提供文件名。我已经找到了一些半相关问题的答案,并看到了一些东西,比如du和使用find的printf选项,但我还没能把它们

我正在开始编写一个脚本,到目前为止:

#!/bin/bash

for d in $(find /home/username/ -maxdepth 1)
do
        if [[ $d == *.txt ]]
        then
                echo $d
        fi
done
这将按预期执行,但是我希望它根据文件大小从大到小为我提供文件名。我已经找到了一些半相关问题的答案,并看到了一些东西,比如du和使用find的printf选项,但我还没能把它们拼凑在一起

你可以写:

ls -1 -S /home/username/*.txt
其中,
-1
标志告诉
ls
每行打印一个文件,
-S
标志告诉它按大小(从最大到最小)对文件进行排序

这与您的代码之间有一些细微的差别(例如,这不会列出名称以
开头的文件),但我猜这些差别都不在您关心的事情上。(如果是,请详细说明您的要求。)

您可以写:

ls -1 -S /home/username/*.txt
其中,
-1
标志告诉
ls
每行打印一个文件,
-S
标志告诉它按大小(从最大到最小)对文件进行排序


这与您的代码之间有一些细微的差别(例如,这不会列出名称以
开头的文件),但我猜这些差别都不在您关心的事情上。(如果是,请详细说明您的要求。)

使用
stat
命令打印每个文件及其大小,然后通过管道进行排序

stat -f '%z %N' /home/username/*.txt | sort -nr
如果不想在输出中包含尺寸,则可以通过管道连接到
切割

... | cut -d' ' -f2-

使用
stat
命令打印每个文件及其大小,然后通过管道进行
sort

stat -f '%z %N' /home/username/*.txt | sort -nr
如果不想在输出中包含尺寸,则可以通过管道连接到
切割

... | cut -d' ' -f2-
  • 打印每个文件及其大小和文件名
  • 第一列的数字排序,即大小
  • 移除带有切口的第一个柱
  • 将每行读入
    $line
    变量
  • echo“$line”
  • 打印每个文件及其大小和文件名
  • 第一列的数字排序,即大小
  • 移除带有切口的第一个柱
  • 将每行读入
    $line
    变量
  • echo“$line”

请注意,到目前为止,只需编写
find/home/username/-maxdepth 1-name'*.txt'
,甚至只编写
ls-1/home/username/*.txt
,您的代码就可以变得更简单、更安全。请注意,只需编写
find/home/username/-maxdepth 1-name'*.txt'
,您的代码就可以变得更简单、更安全,甚至是
ls-1/home/username/*.txt
find
都是你更好的建议
find
可以组合名称、大小和其他组件,并灵活控制输出,以支持管道中的下一步。即使您不需要递归,也可以避免进一步的过滤。
find
如果您不递归,则不需要。丹法瑞尔:为了确保我明白,你是说任何人都不应该使用
ls
,因为
find
在所有方面都更好?如果是那样的话,我恭敬地表示不同意。你的回答很好,我投你一票。我认为可以公平地说,
find
的目的是,并且有很多很好的功能,根据文件的各种属性查找文件,并完全控制格式和结果的输出。我想鼓励人们在给定许多已知条件的情况下,在尝试搜索文件时,不要查看
ls
。我想有人举一个例子,用find有效地过滤文件列表,而不需要额外的步骤,正如你所指出的,
find
find
是你更好的建议
find
可以组合名称、大小和其他组件,并灵活控制输出,以支持管道中的下一步。即使您不需要递归,也可以避免进一步的过滤。
find
如果您不递归,则不需要。丹法瑞尔:为了确保我明白,你是说任何人都不应该使用
ls
,因为
find
在所有方面都更好?如果是那样的话,我恭敬地表示不同意。你的回答很好,我投你一票。我认为可以公平地说,
find
的目的是,并且有很多很好的功能,根据文件的各种属性查找文件,并完全控制格式和结果的输出。我想鼓励人们在给定许多已知条件的情况下,在尝试搜索文件时,不要查看
ls
。我希望有人提供一个例子,使用find来有效地过滤文件列表,而不需要额外的步骤,正如您所指出的,
find