Automation 是否自动展平某些目录而不是其他目录?
我有一个目录,里面有几千个子目录(但是这些子目录中没有子目录),我只需要展平一些子目录的内容,所以基本上把这些目录的内容放到根目录中 但是我不能对所有的子目录都这样做,而那些我不能展平的子目录中有多个文件Automation 是否自动展平某些目录而不是其他目录?,automation,directory,flatten,Automation,Directory,Flatten,我有一个目录,里面有几千个子目录(但是这些子目录中没有子目录),我只需要展平一些子目录的内容,所以基本上把这些目录的内容放到根目录中 但是我不能对所有的子目录都这样做,而那些我不能展平的子目录中有多个文件 有没有办法自动做到这一点?Python脚本、perl脚本、bash或其他什么?我真的,真的,真的不想用手来做这件事…类似的东西,在bash中(foo表示要展平的目录): 这也将从foo中删除一个空的子目录 您还可以将其放入shell脚本文件中,并使用$1作为目录名: # Exit it a d
有没有办法自动做到这一点?Python脚本、perl脚本、bash或其他什么?我真的,真的,真的不想用手来做这件事…类似的东西,在
bash
中(foo
表示要展平的目录):
这也将从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
您可以将其放入名为
flatte
的文件中,然后运行sh flatte foo
以展平目录foo
。或者,chmod+xflatten
并运行/flattefoo
。最后,如果您长期使用它,您可以将它移动到我们的路径中的一个目录
,这样您就可以键入展平foo
。我在Linux上的主目录中有一个bin
文件,当我登录时,我把自己想要的工具放在那里,然后我把~/bin
放在路径中(在bash
配置文件中设置)。一般来说,也许是这样您是否有可编程的标准来确定是否要展平目录?如我所说,如果目录中只有一个文件,则必须展平目录。我不知道这是否是可编程的标准…谢谢你的澄清。您最初的问题陈述中说,“…我无法展平的文件夹中有多个文件”(即,如果文件夹有多个文件,则不会展平),这并不意味着每个文件夹都有一个文件被展平(如果文件夹有一个文件,则会展平)。因此,您的附加注释很有帮助。当我尝试运行该操作时,它似乎试图从整个系统的根目录中删除目录…在我的第一句话中,我说,“$1表示您要展平的目录“。您必须将$1
设置为所需的目录。如果您将其放入一个shell脚本文件中,比如称为foo
,那么您可以运行foomy\u dir
。我对答案进行了编辑,使其非常清晰。好吧,当我现在尝试运行它时,它失败了,因为它似乎无法支持包含多个单词的目录名,相反,会出现一系列错误,如:ls:This:no-the-file或directory
ls:is:no-the-file或directory
$x
的路径名来处理嵌入空间。我已经修改了它。太棒了,它现在工作得很好。唯一奇怪的是,它说一些目录在忽略其他目录时不是空的,而且还有sn完全没有任何模式。但这只发生在7个目录上,我有2500多个目录要处理,而且它告诉我哪些目录不是空的,所以非常容易清理。谢谢!
# 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