我正在尝试使用单行命令来查找指定的每个目录(或子目录)bin
,然后打印其下所有文件的列表,但也不会列出它们下的目录名称。
我尝试了几种不同的方法来实现此目的,但到目前为止都没有奏效:
find ~ -type d -name "bin" -exec ls '{}' ';' | grep -v /
我对此进行了测试,它会列出文件,但它还会列出任何 bin 下的目录。因此,如果我的目录下有一个如下所示的子目录bin
:bin
~/home/
~/home/bin
file1.txt
~/home/bin/bin
file2.txt
输出看起来像这样:
bin
file1.txt
file2.txt
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
命令以获取找到的每个文件的大小。命令末尾的 可以确保一次+
传递多个文件,从而减少调用次数并提高性能。du
du
sort -rh
:这会以人类可读的格式 (-h
) 和相反的顺序 (-r
) 按大小对输出进行排序,因此最大的文件显示在顶部。