使用 find 时不要将父目录列为子目录的一部分

使用 find 时不要将父目录列为子目录的一部分

假设我有这样的情况:

$ find ./src -name '*.txt'
./src/file1.txt
./src/subdir1/file2.txt
./src/subdir1/subsubdir1/file3.txt
./src/subdir2/file4.txt

我想排除正在搜索的目录,所以类似:

./file1.txt./src/file1.txt
./subdir1/file2.txt不是./src/subdir1/file2.txt等等。

添加-mindepth 1没有任何作用。

是否可以纯粹做我想做的事情find

答案1

对于没有find支持的版本的情况-printf '%P',您可以使用此替代结构来避免包含搜索路径。

问题的出发点:

find ./src -name '*.txt'

相同,但结果中没有搜索路径

( cd ./src && find . -name '*.txt' )

假设您的问题中显示的文件结构,结果是

./file1.txt
./subdir1/file2.txt
./subdir1/subsubdir1/file3.txt
./subdir2/file4.txt

答案2

扩展什么@steeldriver 说:

$ cd "$(mktemp --directory)" # create temporary directory
direnv: unloading
$ mkdir foo bar
$ touch foo/1 bar/2
$ find foo bar -type f -name '*' -printf '%P\n'
1
2

GNU 手册中对格式化字符串%P的记录如下find

%P
文件名以及发现该文件的起点名称已被删除。

这里,“文件名”指的是找到的文件的路径名,而不仅仅是文件名。

相关内容