l0b*_*0b0 64
这几乎让我畏缩了。
ls都将比已建立的方法(如或globs )更复杂且更容易出错。find [...] -execrm google并按Tab。如果它没有立即完成,Tab请再次按以查看匹配文件的列表。键入文件名的更多字符以缩小范围,直到完成,然后运行命令。Joh*_*ohn 50
你的想法是对的,只是错过了一些细节。由于您正在处理进入 STDIN 的列表并rm需要参数,因此您需要使用xargs.
因此:
ls | grep chrome | xargs rm
Run Code Online (Sandbox Code Playgroud)
应该给你你想要的。
请注意,如果要删除chrome文件以外的所有内容,只需添加-v到grep语句中即可。
请注意,根据此问题的其他答案,这可能是完成您想要完成的任务的一种糟糕方式。
cha*_*der 36
您还可以使用带有通配符的 find 命令:
find . -maxdepth 1 -name '*chrome*' -delete
Run Code Online (Sandbox Code Playgroud)
请注意,“-maxdepth”参数确保 find 仅在当前目录中有效,并且不会递归到子目录中。
Has*_*tur 12
永远不要解析 ls 的输出
我的建议是避免解析 ls [ 1 ]的输出,如果与del命令结合使用则更是如此。出于多种原因,这主要与文件名中允许的意外字符和不常用字符有关。
即使您应该期望属于 Linux 包的文件名将“表现良好”,但如果其他文件存在于同一目录中但您不知道或注意到,这个问题仍然会出现。
最好使用find,选项卡扩展(开始写入名称并按Tab),文件名扩展 [ 2 ]为*MyKey*...
一个快速的解决方案
由于您想选择所有.deb带有“google”的包(以 结束),您可以使用通配符构建您的请求* *google*.deb并执行简单的操作
rm -i *google*.deb
Run Code Online (Sandbox Code Playgroud)
这将选择中间带有“google”的每个文件名,这些文件名将出现在当前目录中。选项(interactive)会提示确认,用参数扩展删除文件的好习惯。.deb-i
溶液接近你尝试的理念,
如果你的目的是要建立的片之后,你的命令行一块,所以你做了ls,以后ls | grep google,和你检查你的输出后,只可以在子shell执行它$(...)与
rm -i $(ls | grep google)
Run Code Online (Sandbox Code Playgroud)
一种更快更危险的方法 [ 3 ],是使用!!
ls | grep google
rm -i $(!!)
Run Code Online (Sandbox Code Playgroud)
这将执行历史记录中完成的最后一个命令。如果您事先histverify使用shopt -s histverify.
touch 0 1 2 3 4 5 6 7 8 9
find . -name \[0-9] -ok rm {} \;
Run Code Online (Sandbox Code Playgroud)
< rm ... ./0 > ? y
< rm ... ./9 > ? y
< rm ... ./8 > ? y
< rm ... ./7 > ? y
< rm ... ./6 > ? y
< rm ... ./5 > ? y
< rm ... ./4 > ? y
< rm ... ./3 > ? y
< rm ... ./2 > ? y
< rm ... ./1 > ? y
^C
Run Code Online (Sandbox Code Playgroud)
...使用-name '*c*.deb'或其他适合您的模式。