如果我有这个,有可能吗:
/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