我想使用同一个命令find
递归遍历某些子文件夹,$HOME
但不遍历其他子文件夹。可以吗?
为了澄清起见,我想递归到~/Desktop
、~/Documents
和~/Dropbox
,但不想递归到~/.config
或~/.dropbox
或~/.cache
。
答案1
您可以将想要从中开始的目录作为多个起点传递给find
。
您想要用来find
搜索一些特定目录,所有这些目录发生作为你的主目录的子目录:
为了澄清起见,我想递归到
~/Desktop
、~/Documents
和~/Dropbox
,但不想递归到~/.config
或~/.dropbox
或~/.cache
。
因此,您只需将这些目录作为起点即可find
。我们经常使用单个目录作为起点,通常是.
,但find
不限于此。
find ~/Desktop ~/Documents ~/Dropbox -name my-file
代替-name my-file
与您想要运行的其余find
命令(即测试和操作)一起。
这不会提供你的主目录本身作为起点find
,因为它提供的任何目录都不包含你的主目录——它们是包含于它——您的主目录中不包含在任何特定目录中的文件将不会被找到。
如果这些目录恰好是全部您的主目录中名称不以 开头的子目录.
,那么您可以让 shell 为您构建列表:
find ~/*/ -name my-file
*
匹配文件名中的任何字符序列。最后一个尾随字符/
导致仅匹配目录。默认情况下,shell 不会扩展*
名称以 开头的文件.
。因此,除非您启用了dotglob
shell 选项(或者您的 shell 具有的任何选项,如果您的 shell 不是 Bash),否则 生成的列表将*
不包括您的主目录的.config
、.dropbox
或子目录。.cache
名称以 开头的文件和目录.
并位于作为起点传递的目录中当然还是会被发现的。