Bash 脚本检查文件夹中的文件,然后将文件移动到根目录并删除空目录



这应该很简单。 我需要检查根目录中的每个文件夹中的文件,并将文件从其目录移动到根目录并删除该空目录。 我在 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

最新更新