使用通配符和变量删除多个文件的正确方法是什么?这是我的变量"$dir"
$ echo "$dir"
/home/path/to/file
这里我有双引号内的通配符,但它不起作用:
$ rm "$dir/data/ffg_per_product/ffg*"
rm: cannot remove `/home/path/to/file/data/ffg_per_product/ffg*': No such file or directory
这里我有双引号外的通配符,它有效:
$ rm "$dir/data/ffg_per_product/ffg"*
在这里你可以看到文件被删除:
$ ls -lth ffg_per_product/ffg* | wc -l
ls: cannot access ffg_per_product/ffg*: No such file or directory
0
所以我想知道的是,我是否正确地使用引号来删除带有通配符的文件rm "$dir/data/ffg_per_product/ffg"*
?或者还有其他更好的方法吗
注意:对一些人来说可能是显而易见的,但只是为了参考和明确起见,ls
也是如此,例如ls "$dir/data/ffg_per_product/NAME"* | wc -l
,因为通配符必须在双引号之外。
外壳将引号外的*
扩展为匹配的文件名。
引号中的*
不是展开的,它是按字面意思使用的,只是一个简单的*
。
这是正确的,符合您的意图:
rm "$dir/data/ffg_per_product/ffg"*
ls
命令的另一个示例也是如此,完全相同的推理。