使用通配符和变量删除多个文件的正确方法是什么?这是我的变量"$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
,其中,外卡必须在双引号之外。
答案 0 :(得分:3)
引号之外的login
由shell扩展为匹配的文件名。
内部引号*
未展开,按字面意思使用,只是一个简单的*
。
这是正确的,符合您的意图:
*
使用rm "$dir/data/ffg_per_product/ffg"*
命令的另一个示例也是如此,
完全相同的推理。