如何获取目录中的所有文件?

时间:2012-09-14 14:31:24

标签: bash

为什么这不起作用?

find . -maxdepth 1 -type f -print0 | xargs -0 .

我得到的只是xargs: .: Permission denied

2 个答案:

答案 0 :(得分:14)

当您运行. file时,您将调用内置.的shell。您的xargs变体尝试执行当前目录 即使它确实调用了内置命令,该命令也会在子shell中运行,因此所有“采购”都将毫无用处。

使用shell globbing和循环:

for file in * ; do
  if [ -f "$file" ] ; then
    . "$file"
  fi
done

答案 1 :(得分:1)

@Mat的解决方案是最干净的,但如果您对某些bash-fu感兴趣而感兴趣,以下解决方案基于原始的find命令,也有效:

eval $(find . -maxdepth 1 -type f -exec echo . \'{}\'';' \;)
  • find-exec一起用于为找到的每个文件构建一个源代码命令,例如. './foo';。请注意转义的单引号以确保具有特殊字符的文件名。处理得当。
  • find将返回以换行符分隔的采购命令列表;通过使用命令替换($()而不使用双引号,shell将这些行折叠成一行,每个行使用一个空格作为分隔符。
  • 最后,eval在当前shell的上下文中执行完整的源代码命令列表(在OS X 10.8.1上验证)。

注意:此解决方案的一个潜在问题是命令字符串可能变得很大 - 可能太大 - 存在许多文件和/或长文件名。