忽略的可能性,文件名包含换行符,您可以使用sed
为pringley表明他answer,或者你可以创建一个while
循环与read
命令:
find . |
while read -r line
do
echo "$line$line"
done
(该-r
是“生'输入;它停止在输入中扩展反斜杠转义序列的外壳,并且是外壳中的read
命令的标准POSIX特征。)
由于您提到bash
,所以yo u能避免在文件名中的换行符问题通过使用find . -print0
选项终止一个空字节('\0'
在C)每个名称,而不是一个换行符,然后使用:
find . -print0 |
while read -r -d '' line
do
echo "X${line}${line}X"
done
的-d ''
替换正常的换行符定界符与字符串参数的第一个字符,但字符串是空的,所以第一个字符是唯一的字符是空字节。
没有一个简单的方法(也没有,据我所知,硬路)使用的线沿线的一个for
循环:
for line in $(find .)
do
echo "X${line}${line}X"
done
与空间工作可靠的名称,或换行符。
通常,您可能需要使用xargs
命令。这读取标准输入并使用从标准输入读取的内容作为命令的参数创建命令行。
find . | xargs wc -l
或者,用换行和空间安全(默认情况下,xargs
在空格,制表符和换行符分割参数):
find . -type f -print0 | xargs -0 wc -l
有很多的选项,你可以申请xargs
- 尤其是GNU版本。
但是,你也有选项find
在很大程度上使xargs
冗余:
find . -type f -exec wc -l {} +
基本上做相同的工作作为find . -print0 | xargs -0 wc -l
命令。一个区别是,如果find
的输出中没有文件,那么使用-exec
完全不会执行wc
,而默认情况下,xargs
将执行一次(没有文件名参数;用于POSIX合规性)。使用GNU xargs
,您可以使用-r
或--no-run-if-empty
来停止这种情况。无论如何,Mac OS X xargs
似乎都这样做。
考虑'find。 | xargs -I {} printf“%s之间%s \ n”{} {}',试试吧,它会打印什么? –
如果你没有在'{}'和'{}'之间留出空格,我希望它能打印出“./file./file”。如果*有*空格,我期望“./file”./file“ –
我看,这是正确的,我不知道大括号在那里。 –