命令行:如何处理文件名中的空格

命令行:如何处理文件名中的空格

我正在测量一组文件的总大小,这些文件的路径存储在文本文档 files.txt 中。files.txt 的示例内容:

file1.txt
file2.txt
file3.txt

这个 shell 命令给出了我想要的输出:

$ du -hc $(cat files.txt)

除非我的文件名中有空格,例如:file 9.txt然后,du -hc尝试在空格处解析文件名。无论我把引号放在哪里,在 files.txt 中还是在我的 shell 命令中,它仍然解析不正确。我应该怎么做?

仅供参考,我的文件列表文档是如下命令的输出:

find ~/Dropbox/ -type f -iname "*.BMP" >> bmpfound.txt

我的系统详细信息:MacOS,在 Terminal.app 中使用 oh-my-zsh

答案1

利用-print0选项find并管道连接到xargs -0

find ~/Dropbox/ -type f -iname "*.BMP" -print0 | xargs -0 du -ch

或者,正如 Gordon Davisson 所评论的那样,这可以简化:

find ~/Dropbox/ -type f -iname "*.BMP" -exec du -ch {} +

就此而言,其中任何一个都应该适用于包含空格或任何类型的愚蠢字符的文件名。

我不确定您是否有意将find的输出重定向到文件而不是通过管道传输,但如果您确实希望保留文件列表,则可以这样做:

xargs -0 du -ch < bmpfound.txt

相关内容