plr*_*plr 11 bash filenames rm macos
我想删除999名称中没有字符串的文件。
我试过了:
grep -vlr 999 . | xargs -0 rm -f --
find . -print0 | grep --null-data -v 999 | xargs -0 rm --
Run Code Online (Sandbox Code Playgroud)
但它们都不起作用。我正在使用 macOS Sierra 和 bash:3.2.57。
Kus*_*nda 21
在 中使用扩展的通配模式bash:
rm ./!(*999*)
Run Code Online (Sandbox Code Playgroud)
这需要shopt -s extglob启用(并且为了安全起见,如果所有文件名都包含shopt -s failglob,则不会!(*999*)错误地删除具有异常名称的文件999)。该模式!(*999*)将匹配当前目录中的任何名称,除了那些匹配*999*.
要同时删除隐藏文件(名称以点开头的文件),请使用 启用该dotglob选项shopt -s dotglob。
只关心常规文件或常规文件的符号链接(而不是目录等):
for name in ./!(*999*); do [ -f "$name" ] && rm "$name"; done
Run Code Online (Sandbox Code Playgroud)
zsh与上述循环等效的外壳将是
rm ./(^(*999*))(.)
Run Code Online (Sandbox Code Playgroud)
您的第一个命令将不起作用,因为grep它将查看文件内部。它将删除所有没有行的文件999(是否添加了该--null选项以便与 一起使用xargs -0)。
您的第二个命令将不起作用,因为grepmacOS 不支持--null-data(但它确实有一个--null选项,但仅用于生成文件名输出时)。另请注意,它将查找999文件路径名中的任何位置(即包括任何目录组件),而不仅仅是文件名。
ilk*_*chu 18
只需反转名称条件find:
find . -type f \! -name "*999*"
Run Code Online (Sandbox Code Playgroud)
添加-delete或-exec rm {} +实际删除匹配的文件。