如何使用find命令列出文件名而不列出路径?

mic*_*lbr 3 find

我已经在线检查了一些答案,但是当命令中有参数时它们不起作用-name(也许我做错了什么,不确定)。我想做的是仅列出文件名(而不是目录/路径),更复杂的是,我有相同的文件名但具有不同的扩展名,所以我需要使用-name和 来过滤结果-o,问题是我的建议看到使用 或-printfbasename并且当存在时这些效果不佳-name *.txt -o name *.pdf。还有其他方法可以解决这个问题吗?

\n

我的文件示例:

\n
/dir1/dir2/dir3/dir4/\n                    /file1.txt\n                    /file1.pdf\n                    /file1.ods ...etc.\n
Run Code Online (Sandbox Code Playgroud)\n

我只对每个列表列出一种或多种类型的文件感兴趣(通过使用-name来过滤我的结果。

\n

是否可以仅使用 1 个find命令来完成它,或者我必须分两步完成(将结果保存在临时文件中,然后从临时文件中过滤/删除目录)?我试图完成的结果是一个文本文件,每行都有文件名:

\n
file1.txt\nfile1.pdf\nfile1.ods\nfile2.txt\nfile2.pdf\netc.\n
Run Code Online (Sandbox Code Playgroud)\n

我使用的命令是

\n
find /dir1/dir2/dir3/dir4/ -type f -name '*.txt' -o -name '*.pdf' -o -name '*.ods' -printf "%f\\n"\n
Run Code Online (Sandbox Code Playgroud)\n

我正在使用 GNU 查找。

\n

更新

\n

事实证明我必须把\\(...\\),正如 \xce\xb1\xd2\x93s\xd0\xbd\xce\xb9\xce\xb7 提醒的那样

\n

αғs*_*нιη 5

当以逻辑 OR 模式使用多个表达式时,-o您需要将它们全部括在 内\( ... \),否则始终尊重最后一个表达式结果;并-printf '%f\n'用于仅打印删除了所有前导目录的文件名。

find . -type f \( -name '*.pdf' -o -name '*.txt' \) -printf '%f\n'
Run Code Online (Sandbox Code Playgroud)

请参见“操作员”man find部分:( expr )

运营商
...

(expr)
强制优先。由于括号对于 shell 来说是特殊的,因此通常需要用引号引起来。

因此您可以使用\( ... \)or '(' ... ')'(括号前后的空格很重要)来转义它们。