我有一个目录,里面有几千个子目录(但这些子目录中没有子目录),我只需要扁平化其中一些子目录的内容,所以基本上是将这些目录的内容放到根目录中。
但是我不能用所有的子目录来做到这一点,并且我不能展平的那些子目录中有多个文件。
有没有办法自动做到这一点?Python脚本、perl脚本、bash或其他什么?我真的,真的,真的不想手工做这件事...
发布于 2013-07-17 19:07:59
在bash
中类似这样(foo
表示您想要展平的目录):
for x in foo/*
do
COUNT=`ls -1 "$x" | wc -l`
if ([ -d "$x" ] && (test $COUNT -le 1))
then
if test $COUNT -eq 1; then
mv "$x"/* $1
fi
rmdir "$x"
fi
done
这还将从foo
中删除一个空子目录。
您还可以将其放入shell脚本文件中,并使用$1
作为目录名:
# Exit it a directory name isn't given
if [ "$1" = "" ] ; then
echo "Usage: $0 directory"
echo "Flattens directory"
exit
fi
for x in "$1"/*
do
COUNT=`ls -1 "$x" | wc -l`
if ([ -d "$x" ] && (test $COUNT -le 1))
then
if test $COUNT -eq 1; then
mv "$x"/* "$1"
fi
rmdir "$x"
fi
done
您可以将其放入一个名为flatten
的文件中,然后运行sh flatten foo
来扁平化目录foo
。或者,使用chmod +x flatten
并运行./flatten foo
。最终,如果您在一段时间内经常使用它,您可以将它移动到我们的PATH
中的一个目录中,这样您就可以只输入flatten foo
。我在Linux上的主目录中有一个bin
文件,当我登录时,我把我自己的工具放在这里,我把我的~/bin
放在我的PATH
中(在bash
配置文件中设置)。
https://stackoverflow.com/questions/17678063
复制相似问题