在Git Bash中删除非Git目录,Windows

24
xx@xx-PC ~/xampp/htdocs/sites
$ rmdir /s "yo-2"
rmdir: `/s': No such file or directory
rmdir: `yo-2': Directory not empty

xx@xx-PC ~/xampp/htdocs/sites
$ rmdir "yo-2"
rmdir: `yo-2': Directory not empty

我似乎无法在Git Bash中使用rmdir命令。它不在一个git repo中,我已经尝试过上述方法了。Mkdir按预期工作,为什么rmdir不行呢?

7个回答

39
rmdir命令不能删除空目录。
请尝试:
  rm -rf yo-2

git-bash 是类似 Linux 的 shell。


2
除了节点组件文件夹之外,这个工作正常 - 提示“目录不为空”或“文件/路径太长”。有什么办法可以解决这个问题吗? - sledgeweight
2
当使用rm dir/*命令删除包含大量文件且替换失败、路径非常长、包含奇怪字符的文件名或路径中存在打开的文件时,可能会导致rm命令失败。有什么线索吗? - Raul Andres

8

如果您想要删除整个目录,而不管其中是否包含内容,您可以使用以下命令:

rm <dirname> -rf

这个方法可以像标记的答案一样工作,但速度要慢得多。不过还是感谢您的建议! - sledgeweight
2
它是相同的命令,为什么运行速度变慢了?感谢反馈。 - chrcoe

1
只需使用以下命令:

rm -rfv mydirectory


0

在尝试了几个其他命令后,这个对我起作用:

rm dirname -rf

0
有点晚了,但我认为这仍然可以帮助那些在 Windows 系统上遇到性能问题的人。在 Windows 上使用 git bash 相对于普通的 rm -rf 命令来说,删除速度非常快。 这里的诀窍是将文件/目录移动到临时目录中的另一个随机名称,在同一驱动器(Windows)或同一分区(*nix 系统)上,并以后台模式调用rm -rf命令。 至少你不需要等待阻塞的 IO 任务,操作系统会在空闲时尽快执行删除操作。

根据您使用的系统,您可能需要安装realpath程序(例如 macOS)。另一种选择是编写像本文中的 Bash 可移植函数: bash/fish command to print absolute path to a file

fast_rm() {
    path=$(realpath $1) # getting the absolute path
    echo $path
    if [ -e $path ]; then
        export TMPDIR="$(dirname $(mktemp -u))"
        kernel=$(uname | awk '{print tolower($0)}')
        # if windows, make sure to use the same drive
        if [[ "${kernel}" == "mingw"* ]]; then # git bash
            export TMPDIR=$(echo "${path}" | awk '{ print substr($0, 1, 2)"/temp"}')
            if [ ! -e $TMPDIR ]; then mkdir -p $TMPDIR; fi
        fi
        if [ "${kernel}" == "darwin" ]; then MD5=md5; else MD5=md5sum; fi
        rnd=$(echo $RANDOM | $MD5 | awk '{print $0}')
        to_remove="${TMPDIR}/$(basename ${path})-${rnd}"
        mv "${path}" "${to_remove}"
        nohup rm -rf "${to_remove}" > /dev/null 2>&1 &
    fi
}

# invoking the function
directory_or_file=./vo-2
fast_delete $directory_or_file

0

我曾经遇到过同样的问题,这个方法对我有用。

rimraf是一个Node.js包,它是UNIX命令rm -rf的node版本,因此您需要安装包含npm的Node.js。然后您可以运行:

npm install -g rimraf

然后您就可以在命令行中运行rimraf了。

rimraf 目录名

访问https://superuser.com/questions/78434/how-to-delete-directories-with-path-names-too-long-for-normal-delete

我发现这个解决方案是因为npm本身由于嵌套依赖项的方式而导致了这个问题。


-1

回复晚了,但对于那些正在寻找解决方案的人,对我来说

rm <dirname> -rf

不太好,我总是在节点目录上遇到非空目录或路径过长的问题。

一个非常简单的解决方案: 将要删除的目录移动到磁盘的根目录(以缩短路径),然后您就可以正常删除它了。


如果您的路径名太长,这将是一个问题,但它与此处的问题无关。 - Lasse V. Karlsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接