删除保留所有内容的父文件夹

删除保留所有内容的父文件夹

我想删除我的父目录但保留其所有内容。目前我的目录结构

$ /usermanagement/usermanagement/file1

删除我的父目录后,我想看到如下结构

$ /usermanagement/file1

答案1

(假设要删除的目录是当前工作目录)

zsh

cd -P . &&
  mv -- *(D) .. &&
  cd -P .. &&
  rmdir ~-

bash

cd -P . &&
  (shopt -s dotglob && mv -- * ..) &&
  cd -P .. &&
  rmdir "$OLDPWD"

cd -P .确保存储的当前工作目录$PWD没有符号链接。我们希望将所有文件和目录移动到父级中,包括隐藏的文件和目录(因此(D)有通配标记和dotglob选项)。

如果有效,我们将当前目录向上一级更改并删除以前的目录。

(您可能需要添加一个-i选项,以便mv有机会取消会覆盖文件的移动)

答案2

可能是我没有正确理解你的问题。但我从你的问题中得到的答案是,

假设您位于当前目录,其名称为nested,父目录名称为test

$ cp -Rp . ../;cd ../;rm -rf nested

解释


  1. cp -Rp . ../- 这将复制所有文件,包括目录、嵌套目录和隐藏文件。在哪里,

    • -R标志用于“递归复制目录”

    • -p是“保留指定的属性(默认:模式、所有权、时间戳),如果可能的话附加属性:上下文、链接、xattr、全部”,

    • .用于指示当前目录作为源

    • ..指示父目录作为目标。

  2. cd ../- 这会将您从当前目录移动到父目录

  3. rm -rf nested- 这将删除所有文件,包括目录、嵌套目录和隐藏文件。

来源:手册页

答案3

比上面的解决方案更简单的是:

mv /usermanagement/usermanagement /usermanagement.tmp
rmdir /usermanagement
mv /usermanagement.tmp /usermanagement

usermanagement即以临时名称将下层目录移动到根目录,删除(现在为空)上层usermanagement目录,最后将/usermanagement.tmp目录重命名为/usermanagement.

答案4

可能是最简单的解决方案:

$ mv /usermanagement/usermanagement/* /usermanagement/ && rmdir /usermanagement/usermanagement

相关内容