使用find列出某个目录下的所有文件

使用find列出某个目录下的所有文件

我正在尝试使用单行命令来查找指定的每个目录(或子目录)bin,然后打印其下所有文件的列表,但也不会列出它们下的目录名称。

我尝试了几种不同的方法来实现此目的,但到目前为止都没有奏效:

  1. find ~ -type d -name "bin" -exec ls '{}' ';' | grep -v /

我对此进行了测试,它会列出文件,但它还会列出任何 bin 下的目录。因此,如果我的目录下有一个如下所示的子目录binbin

~/home/
   ~/home/bin
      file1.txt
      ~/home/bin/bin
         file2.txt

输出看起来像这样:

bin
file1.txt
file2.txt
  1. find ~ -type d -name "bin" -exec ls -f '{}' ';'

我读到这样做ls -f只会列出文件,但不幸的是这也列出了目录bin..并且.

那么我该怎么做呢?

答案1

使用-path,您可以尝试:

find ~ -path '*/bin/*' -type f

这不会列出bin自身,因此要同时获取两者:

find ~ \( -path '*/bin/*' -type f \) -o \( -name bin -type d \)

答案2

您可以通过嵌套find调用来做到这一点:

$ find ~ -type d -name bin -exec find '{}' -type f ';'

由于我要替换一个ls呼叫,也许您不希望在第二个find呼叫中列出超过一层的列表。在这种情况下,请在上述-maxdepth 1之后添加-type f

答案3

find ~ -type f -size +10M -exec du -sh {} + | sort -rh
  • find ~:指定要在其中搜索文件的目录(~在本例中)。
  • -type f:这确保只考虑常规文件,而不考虑目录。
  • -size +10M:指定要搜索的文件的最小大小,在本例中大于 10 MB。
  • -exec du -sh {} +:这将执行du -sh命令以获取找到的每个文件的大小。命令末尾的 可以确保一次+传递多个文件,从而减少调用次数并提高性能。dudu
  • sort -rh:这会以人类可读的格式 ( -h) 和相反的顺序 ( -r) 按大小对输出进行排序,因此最大的文件显示在顶部。

相关内容