我有一个目录,里面有几千个子目录(但是这些子目录中没有子目录),我需要展平一些子目录的内容,所以基本上把这些目录的内容带到根目录。
但我无法对所有子目录这样做,而我无法展平的子目录中有多个文件。
任何方式自动执行此操作? Python脚本,perl脚本,bash还是其他什么?我真的,真的,真的不想亲手做到这一点......
答案 0 :(得分:0)
类似这样的内容,在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
个人资料中。