【问题标题】:Delete non git directory in git bash, windows在 git bash、windows 中删除非 git 目录
【发布时间】:2014-04-15 00:22:01
【问题描述】:
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

我似乎无法让 rmdir 在 git bash 中工作。它不在 git repo 中,我已经尝试过上述方法。 Mkdir 按预期工作,为什么不这样?

【问题讨论】:

    标签: command-line git-bash


    【解决方案1】:

    如果您尝试删除整个目录而不考虑内容,您可以使用:

    rm <dirname> -rf
    

    【讨论】:

    • 这与标记的答案一样工作,但速度要慢得多。不过感谢您的意见!
    • 是同一个命令,怎么跑慢了?感谢您的反馈
    【解决方案2】:

    如果目录为空,rmdir 将不起作用

    试试

      rm -rf yo-2
    

    git-bash 是一个类似于 Linux 的 shell

    【讨论】:

    • 这工作除了节点组件文件夹 - 说“目录不是空的”或“文件/路径太长”。任何想法如何解决这个问题?
    • rm 在执行rm dir/* 并且节点包含大量文件时可能会失败,并且替换失败,或者当路径非常长,或者可能处理包含奇怪字符的路径名时,或者当路径中有打开的文件。有什么线索吗?
    【解决方案3】:

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

    rm <dirname> -rf
    

    不好,我总是得到非空目录或节点目录上的路径太长。

    一个非常简单的解决方案: 将要删除的目录移动到磁盘根目录下(缩短路径)即可正常删除。

    【讨论】:

    • 如果您的路径名太长,这是一个问题,但它应该与这里的问题无关。
    【解决方案4】:

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

    rm dirname -rf
    

    【讨论】:

      【解决方案5】:

      有点晚了,但我相信它仍然可以帮助在 Windows 系统上遇到性能问题的人。与普通的 rm -rf 相比,使用 git bash 在 Windows 上删除 真的很快。这里的技巧是将文件/目录移动到同一驱动器(在 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
      

      【讨论】:

        【解决方案6】:

        只需使用以下命令:

        rm -rfv 我的目录

        【讨论】:

          【解决方案7】:

          我也遇到过同样的问题。这对我有用

          rimraf 是一个 Node.js 包,它是用于节点的 UNIX 命令rm -rf,因此您需要安装包含 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 本身由于嵌套依赖项的方式导致了这个问题。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-05-25
            • 2010-12-29
            • 2020-10-21
            • 2010-11-16
            • 1970-01-01
            • 2013-08-25
            • 2012-01-23
            • 2012-07-24
            相关资源
            最近更新 更多