防止 space 使用反引号拆分文件名
prevent space from splitting filenames using backticks
使用查找 select 文件以使用 backticks/backquotes 传递给另一个命令,我注意到包含空格的文件名将被拆分,因此找不到。
是否可以避免这种行为?我发出的命令看起来像这样
wc `find . -name '*.txt'`
但是例如,当目录 x
中有一个名为 a b c.txt
的文件时,它会报告
$ wc `find . -name '*.txt'`
wc: ./x/a: No such file or directory
wc: b: No such file or directory
wc: c.txt: No such file or directory
当与多个文件一起使用时,wc
将显示每个文件的输出,以及包含所有文件总数的最终摘要行。这就是为什么我要执行 wc 一次。
我尝试用 sed 转义空格,但 wc 产生相同的输出(用空格分割文件名)。
wc `find . -name '*.txt' | sed 's/ /\\ /pg'`
对find
使用-print0
选项,对xargs
使用相应的-0
选项:
find . -name '*.txt' -print0 | xargs -0 wc
您还可以使用 -exec
选项 find
:
find . -name '*.txt' -exec wc {} +
从这个 very similar question(我应该将我的问题标记为重复吗?)我使用 bash 的 **
扩展找到了另一个答案:
wc **/*.txt
为了实现这个功能,我必须
shopt -s globstar
使用查找 select 文件以使用 backticks/backquotes 传递给另一个命令,我注意到包含空格的文件名将被拆分,因此找不到。
是否可以避免这种行为?我发出的命令看起来像这样
wc `find . -name '*.txt'`
但是例如,当目录 x
中有一个名为 a b c.txt
的文件时,它会报告
$ wc `find . -name '*.txt'`
wc: ./x/a: No such file or directory
wc: b: No such file or directory
wc: c.txt: No such file or directory
当与多个文件一起使用时,wc
将显示每个文件的输出,以及包含所有文件总数的最终摘要行。这就是为什么我要执行 wc 一次。
我尝试用 sed 转义空格,但 wc 产生相同的输出(用空格分割文件名)。
wc `find . -name '*.txt' | sed 's/ /\\ /pg'`
对find
使用-print0
选项,对xargs
使用相应的-0
选项:
find . -name '*.txt' -print0 | xargs -0 wc
您还可以使用 -exec
选项 find
:
find . -name '*.txt' -exec wc {} +
从这个 very similar question(我应该将我的问题标记为重复吗?)我使用 bash 的 **
扩展找到了另一个答案:
wc **/*.txt
为了实现这个功能,我必须
shopt -s globstar