我有一个目录,其中包含以下文件集:
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
我已经看过this other question,但它并没有解决问题,因为两个文件名都有一套完整的扩展名
Unix 没有文件名扩展,微软的 Windows 也没有(不是在 Windows ME 之后。但是文件资源管理器仍然有这个概念)。您需要做的是找到所有以 ... 开头的文件(在您的情况下以
cheatsheetold.
.您可以使用
cheatsheetold.*
. 然后它将文件列表传递给rm
. 您可以将它与任何命令一起使用。这不是rm
一回事。练习
echo cheatsheetold.*
没有说明在删除文件时希望在哪个 shell(bash、fish、zsh、csh)中使用某种通配符。
作为
bash
一个突出的 shell,我声明可以简单地使用这个命令:请注意,
*
在 as 之后使用通配符--
以避免 bash shell 扩展造成任何未缩进的事故命令行
env | grep 'SHELL'
可能会显示您使用的 shell。我还在更 POSIX 简化的dash
shell 中测试了命令行。我根本不使用任何其他 shell(如 csh 和 tsh 或 fish),所以我不知道 globbing 在那里是如何工作的。
另一种了解哪个 shell 正在运行的方法可能是
ps -p $$
,其中$$
应该是当前进程(shell)的 PID,并使用 ps 工具列出受限于当前 shell 的 PID 的进程。https://help.ubuntu.com/community/ShellGlobbing
您可以使用通配符,但您必须非常小心,因为它可以删除其他可能匹配的文件。
上面的命令将删除名称以任何开头
cheatsheetold.
并后跟任何内容的任何文件,因此任何扩展名。