【问题标题】:prevent space from splitting filenames using backticks防止空格使用反引号拆分文件名
【发布时间】:2015-06-01 17:50:44
【问题描述】:

使用 find 选择文件以使用反引号/反引号传递给另一个命令,我注意到包含空格的文件名将被拆分,因此找不到。

是否可以避免这种行为?我发出的命令是这样的

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'`

【问题讨论】:

    标签: linux command-line


    【解决方案1】:

    -print0 选项用于find 并将相应的-0 选项用于xargs

    find . -name '*.txt' -print0 | xargs -0 wc
    

    您也可以将-exec 选项用于find

    find . -name '*.txt' -exec wc {} +
    

    【讨论】:

    • 这与 xargs 通常所做的完全相反。创建它是为了将呼叫分批成最佳组。
    【解决方案2】:

    从此very similar question(我应该将我的问题标记为重复吗?)我使用 bash 的** 扩展找到了另一个答案:

    wc **/*.txt
    

    为此,我必须这样做

    shopt -s globstar
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-23
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      相关资源
      最近更新 更多