为什么这不起作用?
find . -maxdepth 1 -type f -print0 | xargs -0 .
我得到的只是xargs: .: Permission denied
。
答案 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上验证)。注意:此解决方案的一个潜在问题是命令字符串可能变得很大 - 可能太大 - 存在许多文件和/或长文件名。