删除 .gitignore 中提到的任何文件

Dim*_*las 10 git rm

我的文件中有以下条目.gitignore,我想删除它们。原因是这些文件是 TeX 编译期间创建的临时垃圾文件,我希望能够删除它们。

我怎样才能做到这一点?

meu*_*rus 10

git clean -Xdf
Run Code Online (Sandbox Code Playgroud)

使用大写时-Xgit clean 删除匹配的文件.gitignore

使用-d,git clean还会删除匹配的整个目录.gitignore

使用-f,git clean实际上会删除内容而不是警告您。不过要小心。可能还有其他原因(例如个人direnv配置).gitignored,因此请确保在运行该命令之前始终了解该命令将执行的操作。

特别感谢@Kusalananda 的分享git clean


作为替代方案,如果您有一个包含符号链接目录的依赖项文件夹,并且您不想git clean递归删除这些目录中的所有内容,则可以使用以下较长的形式:

git ls-files --others --ignored --exclude-standard --directory | head -c -1 | tr '\n' '\0' | xargs -0 -r rm -r
Run Code Online (Sandbox Code Playgroud)

git ls-files使用这些选项列出与 相同的目录git clean -Xdn,但更具机器可读性。

head -c -1修剪尾随换行字节。

tr '\n' '\0'将所有换行符转换为NULs。

xargs -0 -r rm -r删除文件和目录。-0NUL分隔符。-r导致它跳过空输入(警告:这是一个不可移植的 GNU 扩展)。


Kus*_*nda 6

git clean -X -f -n
Run Code Online (Sandbox Code Playgroud)

git clean -X将删除与.gitignore. 最后-n导致它实际上并不删除文件,而只是进行试运行,报告本来被删除的文件。

添加-d以同时删除被忽略的目录。

如果没有-X,它会删除未跟踪的文件(但不会删除被忽略的文件)。

git clean --help


Dim*_*las 0

在您的情况下,如果您的文件条目.gitignore不是以以下开头!,那么这一行应该适合您:

while read -r entry;do rm -rf ${entry}; done < .gitignore
Run Code Online (Sandbox Code Playgroud)