Ili*_* K. 214

在当前目录下只查找常规文件,并在没有" ./"前缀的情况下打印它们:

find -type f -printf '%P\n'
Run Code Online (Sandbox Code Playgroud)

从man找到,-printf格式说明:

%P文件的名称,带有命令行参数的名称,在该参数下删除它.

  • 如果您的`find`版本支持`-printf`(并非全部都是),那么+1解决方案. (13认同)
  • 你可以使用`\ 0`而不是'\n`来管道它到`xargs -0`(例如,如果文件名包含空格),例如`find -type f -printf'%P\0'| xargs -0 head` (10认同)
  • 支持与否,它肯定比接受的答案更安全. (8认同)
  • 正如托德所说,但更准确地说:它不是POSIX 7. (2认同)

Lie*_*yan 50

使用sed

find . | sed "s|^\./||"
Run Code Online (Sandbox Code Playgroud)

  • 如何将它与`find -exec`结合起来? (6认同)
  • 这是我的首选解决方案;它与POSIX兼容(几乎在任何地方都可以使用,甚至在嵌入式系统中也可以使用),非常短,并且不太可能导致意外行为。这应该是公认的答案。 (2认同)

Tim*_*een 36

如果它们只在当前目录中

find * -type f -print

那是你要的吗?

  • 一个更相关的问题是'*'由shell评估.您实际上有一种恶意代码注入情况.创建一个名为'--exec rm'的文件和另一个名为'zzzz;'的文件将是微不足道的.再见文件. (31认同)
  • 这将丢失名称以句点开头的文件. (17认同)
  • 这是不安全的.如果文件名以短划线开头,则会将其视为查找选项,可能会失败,或者可能会造成损坏. (5认同)
  • 为什么需要`-print`?没有那个标志就给出了相同的结果. (3认同)
  • 坏,取决于shell设置*可能无法评估为"隐藏"文件/目录 - 以点(.)开头的那些尝试在您的主目录中运行此命令,然后只是"find -type f"并查看差异. (2认同)

gho*_*g74 12

它可以更短

find * -type f
Run Code Online (Sandbox Code Playgroud)

  • 不安全,就像接受的答案一样。`*` 由 shell 扩展,因此任何以 `-` 开头的文件名都将被解释为 `find` 的选项。 (2认同)

小智 6

剥离的另一种方法./是使用cut类似:

find -type f | cut -c3-
Run Code Online (Sandbox Code Playgroud)

进一步的解释可以在这里找到