一次删除所有具有特定名称但扩展名不同的文件

一次删除所有具有特定名称但扩展名不同的文件

我有一个目录,其中包含以下文件集:

cheatsheetold.aux
cheatsheetold.log
cheatsheetold.out
cheatsheetold.pdf
cheatsheetold.synctex.gz
cheatsheetold.tex
cheatsheetnew.aux
cheatsheetnew.log
cheatsheetnew.out
cheatsheetnew.pdf
cheatsheetnew.synctex.gz
cheatsheetnew.tex

我想做的就是删除所有cheetsheetold.

cheatsheetold.aux
cheatsheetold.log
cheatsheetold.out
cheatsheetold.pdf
cheatsheetold.synctex.gz
cheatsheetold.tex

无需触摸cheatsheetnew

cheatsheetnew.aux
cheatsheetnew.log
cheatsheetnew.out
cheatsheetnew.pdf
cheatsheetnew.synctex.gz
cheatsheetnew.tex

我已经看过了这另一个问题,但它并没有解决问题,因为两个文件名都有一套完整的扩展名

答案1

Unix 没有文件扩展名,Microsoft 的 Windows 也没有(Windows ME 之后没有。但是文件资源管理器仍然有这个概念)。您需要做的是找到以...开头的所有文件(在您的情况下以cheatsheetold..

您可以使用 来执行此操作cheatsheetold.*。然后它将文件列表传递给rm.您可以将它与任何命令一起使用。这不是一个rm东西。

练习与echo cheatsheetold.*

答案2

没有说明在删除文件时您希望在哪个 shell(bash、fish、zsh、csh)中使用某种通配符。

作为bash一个著名的 shell,我声明可以简单地使用这个命令:

rm -- cheatsheetold.*

*请注意,在 as之后使用通配符--以避免 bash shell 扩展造成任何未缩进的错误

命令行env | grep 'SHELL' 可能会显示您使用的 shell。我还在更 POSIX 简化的 shell 中测试了命令行dash

我根本不使用任何其他 shell(例如 csh 和 tsh 或 Fish),因此我无法判断 globbing 在那里是如何工作的。

了解哪个 shell 正在运行的另一种方法可能是, ps -p $$其中 应该$$是当前进程(shell)的 PI​​D,并且 ps 工具列出仅限于当前 shell PID 的进程。

https://help.ubuntu.com/community/ShellGlobbing

答案3

您可以使用通配符,但必须非常小心,因为它可能会删除其他可能匹配的文件。

rm cheatsheetold.*

上面的命令将删除名称以任何名称开头cheatsheetold.且后跟任何内容(即任何扩展名)的文件。

相关内容