这应该很简单。 我需要检查根目录中的每个文件夹中的文件,并将文件从其目录移动到根目录并删除该空目录。 我在 Windows 中使用过这个批处理脚本,但我想将其转换为 bash 脚本,而且我对 bash 不太熟悉。
cd /d M:
for /F "delims=" %%a in ('dir /B /AD') do (
cd "%%a"
for /F "delims=" %%b in ('dir /B /AD') do (
move "%%b" ..
)
move *.* ..
cd ..
rd "%%a"
)
例:
/root
/root/Test/1.txt
/root/1.txt
最简单的解决方案(可能是过度使用(,就是在子目录中查找所有文件以进行root/
并将它们移动到root/
,然后尝试删除root/
的所有子目录
find root/ -mindepth 2 -maxdepth 3 -type f -exec mv {} root/ ";"
rmdir --ignore-fail-on-non-empty root/*/
这不会检查是否存在多个同名文件(它只会覆盖它们(。 它还将删除root/
中的任何空目录。
另一种尝试,如果子目录包含已移动的文件,则只会删除子目录:
root=root/
for f in "${root}"/*/*; do
if [ -f "${f}" ]; then
rm -f "${root}/${f##*/}"
mv "${f}" "${root}"
rmdir --ignore-fail-on-non-empty "${f%/*}"
fi
done