我有一个目录,其中包含以下文件集:
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)的 PID,并且 ps 工具列出仅限于当前 shell PID 的进程。
答案3
您可以使用通配符,但必须非常小心,因为它可能会删除其他可能匹配的文件。
rm cheatsheetold.*
上面的命令将删除名称以任何名称开头cheatsheetold.
且后跟任何内容(即任何扩展名)的文件。