为什么find . -name *.c 和find . -name "*.c"执行得到的结果不一样
时间: 2024-05-29 15:12:28 浏览: 72
执行 find . -name *.c 的结果可能会受到 shell 的影响,因为 shell 会先对通配符进行扩展,所以实际执行的命令可能是类似于 find . -name file1.c file2.c file3.c 的形式,这样的话只会匹配到以 file3.c 结尾的文件,而不是所有以 .c 结尾的文件。
而执行 find . -name "*.c" 的命令中,通配符被双引号包含,所以 shell 不会对它进行扩展,find 命令能够正确地匹配所有以 .c 结尾的文件。
相关问题
find . -name *.log | xargs rm
这是一个 find 命令和 xargs 命令组合的命令,用于在当前目录及其子目录下查找所有扩展名为 .log 的文件,并将它们全部删除。具体来说:
- find:查找指定目录下的文件。
- .:指定查找的目录为当前目录。
- -name:按照文件名进行匹配,这里是匹配所有扩展名为 .log 的文件。
- |:管道符号,将 find 命令的输出作为 xargs 命令的输入。
- xargs:将标准输入转换为命令行参数。
- rm:删除指定的文件。
因此,这个命令的作用是在当前目录及其子目录下查找所有扩展名为 .log 的文件,并将它们全部删除。需要注意的是,这个命令一次性删除大量文件,可能会造成数据丢失,需要谨慎操作。如果想先预览将要删除的文件,可以使用以下命令:
```
find . -name *.log | xargs ls -l
```
这样,命令会列出所有将要被删除的文件的详细信息,可以先检查确认再执行删除操作。另外,如果文件名中包含空格等特殊字符,需要使用 -print0 参数替换 -print 参数,例如:
```
find . -name '*.log' -print0 | xargs -0 rm
```
这样,命令会在查找文件时使用 null 字符分隔文件名,避免因文件名中的空格等特殊字符而导致的错误。
批量删除当前目录下后缀名为.c的文件。如a.c、b.c。 作业A.rm *.c B.find . -name "*.c" -maxdepth 1 | xargs rm C.find . -name "*.c" | xargs rm D.以上都不正确
正确答案是C. `find . -name "*.c" | xargs rm`。
解释:
- A选项中,rm命令只会删除一个文件,而不是批量删除。
- B选项中,-maxdepth 1表示只在当前目录查找,但是xargs rm会将所有查找到的文件作为参数传递给rm命令,包括子目录中的.c文件,可能会误删其他目录中的文件。
- C选项中,find命令会查找当前目录及其子目录中所有后缀名为.c的文件,并将它们作为参数传递给xargs命令,xargs命令会将这些文件批量传递给rm命令进行删除。这是正确的做法。
- D选项是错误的,因为选项C是正确的。