rmi*_*sen 2 linux cygwin bash shell command-line
有时您正在处理包含空格的文件和文件夹。问题是任何时候您尝试将包含空格的文件/文件夹通过管道传输到另一个命令行程序时,包含空格的文件/文件夹都会被解释为单独的参数而不是单个参数。例如,考虑以下目录树:
Folder With Spaces
Folder With Spaces/FolderWithoutSpaces
Folder With Spaces/FolderWithoutSpaces/file with spaces.txt
FolderWithoutSpaces
FolderWithoutSpaces/fileWithoutSpaces.txt
Run Code Online (Sandbox Code Playgroud)
如果您尝试运行诸如“grep 'some text' $(find . -type f)”之类的 shell 命令,您将获得以下输出:
grep: ./Folder: No such file or directory
grep: With: No such file or directory
grep: Spaces/FolderWithoutSpaces/file: No such file or directory
grep: with: No such file or directory
grep: spaces.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)
最大的问题是,您如何将包含空格的文件/文件夹作为命令行程序的参数进行管道传输?
小智 7
你最好使用-exec
动作(选项)find
并引用你的论点。
例子:
find . -type f -exec grep stuff '{}' \;
Run Code Online (Sandbox Code Playgroud)
引号将使空格不被解释,并且您不必xargs
不必要地通过管道传输所有内容。
从find
手册页:
-exec
命令;
执行命令;如果返回 0 状态,则为 true。在遇到
find
由“;
”组成的参数之前,所有以下参数都被视为命令的参数。字符串 '{}
' 被当前正在处理的文件名替换,它出现在命令的参数中的任何地方,而不仅仅是在单独存在的参数中,如在某些版本的find
. 这两种结构都可能需要转义(使用“\
”)或引用以防止它们被 shell 扩展。有关使用该选项的示例,请参阅示例部分-exec
。指定的命令对每个匹配的文件运行一次。该命令在起始目录中执行。围绕
-exec
动作的使用存在不可避免的安全问题;您应该改用该-execdir
选项。
归档时间: |
|
查看次数: |
6296 次 |
最近记录: |