删除保留其所含文件的父文件夹吗?

删除保留其所含文件的父文件夹吗?

如果我有这个,有可能吗:

/folder1/folder2/folder3
/folder1/folder2/file1.txt

我可以删除 folder2 但保留其内容吗?

因此结果将如下所示:

/folder1/folder3
/folder1/file1.txt

答案1

cd /folder1/folder2/
mv * ../
cd ../

现在检查文件夹的内容:

ls

然后使用此命令删除目录。这是完全安全的,因为它将仅有的删除空目录:

rmdir folder2/

答案2

我认为您实际上不需要删除某些东西...只需将其移走即可。

mv  /folder1/folder2/*  /folder1/
rmdir /folder1/folder2/

第一个命令将内容移动到父目录,第二个命令删除目录(如果目录为空)。这不会移动隐藏/点文件。如果您还想移动隐藏文件,则需要:

mv  /folder1/folder2/{*,.*}  /folder1/
rmdir /folder1/folder2/

或者在 bash 中使用 dotglob 选项。如果您没有点文件,则会导致no matches found: dir1/dir2/.*bash 中出现该错误,命令将失败。您也可以忽略:

mv: cannot move ‘folder1/folder2/..’ to ‘folder1/..’: Device or resource busy

由于 bash 传递...出现错误mv

答案3

处理隐藏文件:

mv $(find folder2 -mindepth 1 -maxdepth 1) . && rmdir folder2

如果超过ARG_MAX,请改用这个:

find folder2 -mindepth 1 -maxdepth 1 -exec mv {} . \; && rmdir folder2

Rinzwind 的答案不处理隐藏文件。如果您正在使用bash并希望通过*通配符匹配所有隐藏文件,则首先需要shopt -s dotglob或将其放入~/.bashrc

演示:

$ find .
.
./folder2
./folder2/.hidden
./folder2/file1.txt
./folder2/folder3

$ mv $(find folder2 -mindepth 1 -maxdepth 1) . && rmdir folder2

$ find .
.
./.hidden
./file1.txt
./folder3

相关内容