为什么这不起作用?
find . -maxdepth 1 -type f -print0 | xargs -0 .
我得到的只是xargs: .: Permission denied
。
为什么这不起作用?
find . -maxdepth 1 -type f -print0 | xargs -0 .
我得到的只是xargs: .: Permission denied
。
当你运行时. file
,你调用了一个内置的 shell .
。您的xargs
变体尝试执行当前目录。
即使确实调用了内置命令,该命令也会在子 shell 中运行,因此所有“采购”都是无用的。
为此使用 shell globbing 和循环:
for file in * ; do
if [ -f "$file" ] ; then
. "$file"
fi
done
@Mat 的解决方案是最干净的,但如果您对一些 bash-fu 感兴趣,可以使用以下基于原始find
命令的解决方案:
eval $(find . -maxdepth 1 -type f -exec echo . \'{}\'';' \;)
find
用于-exec
为找到的每个文件构造一个采购命令,例如. './foo';
. 请注意转义的单引号以确保文件名具有特殊字符。得到妥善处理。find
将返回一个以换行符分隔的采购命令列表;通过使用不带$()
双引号的命令替换 ( ) ,shell 将这些行折叠成一行,并使用每个空格作为分隔符。eval
在当前 shell 的上下文中执行源命令的完整列表(在 OS X 10.8.1 上验证)。注意:此解决方案的一个潜在问题是命令字符串可能会变大 - 可能太大 - 存在许多文件和/或长文件名。