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

假设我有一个目录/home/smit/test 。 在里面我有很多子目录和文件。 我想只删除Directory /home/smit/test而不是它的内部内容,所以/home/smit/test文件和子目录会自动包含在/home/smit/

另外,在实际情况下,我有/usr/share/backgrounds/all/目录,它有许多子目录。 和这些子目录有很多图像。 我想删除所有子目录,以便它们的内容将包含在/usr/share/backgrounds/all/ 。 我可以用GUI做到这一点,但我想通过终端以酷的方式做到这一点。 我该怎么做?

在这些情况下,存在覆盖同名文件的风险。 正如@Arronical所提到的,你可以使用-b标志来避免这种情况,这会导致任何具有相同名称的文件通过将~附加到它们的名称来区分。 但是,如果有三个或更多具有相同名称的文件,则只保存第一个和最后一个,因此请在移动之前检查内容以保护文件。

第一个简单的案例很容易; 我们可以使用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 

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