如何删除目录而不删除其内容?

如何删除目录而不删除其内容?

假设我有一个目录/home/smit/test。里面有许多子目录和文件。我只想删除目录/home/smit/test 而不删除其内部内容,这样文件和子目录/home/smit/test就会自动包含在内/home/smit/

另外,在实际情况下,我有一个/usr/share/backgrounds/all/包含许多子目录的目录。这些子目录中有很多图像。我想删除所有子目录,以便将其内容包含在内/usr/share/backgrounds/all/。我可以使用 GUI 执行此操作,但我想通过终端以更酷的方式执行此操作。我该怎么做?

答案1

在这些情况下,同名文件可能会被覆盖。正如 @Arronical 所说,您可以使用标志来避免这种情况,该标志-bmv通过在名称后附加内容来区分所有同名文件~。但是,如果有三个或更多同名文件,则只会保存第一个和最后一个文件,因此请在移动之前检查内容以保护您的文件。

第一种简单情况很容易;我们可以使用 shell glob。但是,这不会移动隐藏文件,因此,如果您有任何以 开头的文件名.,请先打开dotglob

shopt -s dotglob

然后你可以运行:

mv -b /home/smit/test/* /home/smit
rmdir /home/smit/test

如果愿意,可以关闭dotglob(打开新 shell 时它将恢复为默认值):

shopt -u dotglob

对于第二种(真实)情况,我们将使用find,它默认移动隐藏文件:

首先请确保您位于正确的位置。

cd /usr/share/background/all
find -type f -exec echo mv -vb -- {} . \;

如果看起来不错,则运行它而不echo实际移动文件

find -type f -exec mv -vb -- {} . \;

然后找到目录

find -type d

如果您看到想要删除的内容:

find -type d -delete

这是安全的,因为它会拒绝删除仍有内容的目录。

相关内容