需求
==========
在C/下存在多个A/B/结构但命名无规则的文件夹,且A/下有且仅有B/一个文件夹,B/ 非空。现在需要将B/下的东西完全移至A/下并删除B/。即:将第三级目录下的文件移动到第二级目录并删除第二级目录。
脚本(在C/下运行)
==========
for i in *
do
for l in "$i"/*
do
mv "$l"/* "$i"
rmdir "$l"
done
done
最近编辑记录 nopriler (2012-08-23 22:33:56)
离线
遍历循环什么的我就不写了。
cd A/B/
cp -r * ../
cd ..
rm -rf B/
注意这样不会复制隐藏文件。
不过貌似有更好的办法是通过重命名目录B,这个你可以考虑下。
离线
遍历循环什么的我就不写了。
cd A/B/ cp -r * ../ cd .. rm -rf B/
注意这样不会复制隐藏文件。
不过貌似有更好的办法是通过重命名目录B,这个你可以考虑下。
虽然不知道『遍历循环』是什么,但从字面上,感觉它正是我不懂纠结的地方。
最近编辑记录 nopriler (2012-08-20 01:15:40)
离线
遍历循环就是把某一个目录下的所有目录都过一遍(遍历)的一个循环。。。
既然是多个那么想简单就得用循环了。。。否则就几步的操作也不难啊。
离线
cd A/B
find . -mindepth 1 -maxdepth 1 -exec mv {} ../ \;
cd ..
rmdir B
前提是保证原来没有 A/B/B,否则就要先将 A/B 改名为 A/B_ 什么的。
最近编辑记录 自由建客 (2012-08-20 08:32:18)
离线
怎么感觉这样子不行?
我的意思是,我有60来个A/B/这种结构的文件夹(A1/B1, A2/B2, 等),然后我想把B/*下的东西移到A/下。一个一个手动来很麻烦,我就想知道怎么写个脚本,让它逐一进入每个文件夹并执行移动删除。
离线
如果你的意思是把子目录中的内容移动到父目录下的话,那么试试
for i in 1 2 3 4 ... n
do
mv A$i/B$i/* A$i/
rm -r A$i/B$i/
done
riverrun, past Eve and Adam's.
离线
A/B/只是模板...实际上那些文件夹的命名是没有规则的。
离线
A/B/只是模板...实际上那些文件夹的命名是没有规则的。
那方法不是一样吗?只不过两个循环咯
riverrun, past Eve and Adam's.
离线
如果所有的 B 都不是空目录的话:
mv */* .
rmdir --ignore-fail-on-non-empty *
离线
nopriler 说:A/B/只是模板...实际上那些文件夹的命名是没有规则的。
那方法不是一样吗?只不过两个循环咯
恕我愚笨。没有规则要怎么写循环?
离线
如果所有的 B 都不是空目录的话:
mv */* . rmdir --ignore-fail-on-non-empty *
假设我这些文件夹在C/下的话,这个命令岂不是会把C/A/B/*的东西移动到C/?但这不是我想要的效果。
离线
百合仙子 说:如果所有的 B 都不是空目录的话:
mv */* . rmdir --ignore-fail-on-non-empty *
假设我这些文件夹在C/下的话,这个命令岂不是会把C/A/B/*的东西移动到C/?但这不是我想要的效果。
C/A/B/* 和问题中的 A/B 不匹配。
事实上,我没有搞清楚你的需求到底是什么,参考 http://www.beiww.com/doc/oss/smart-questions.html
离线
nopriler 说:百合仙子 说:如果所有的 B 都不是空目录的话:
mv */* . rmdir --ignore-fail-on-non-empty *
假设我这些文件夹在C/下的话,这个命令岂不是会把C/A/B/*的东西移动到C/?但这不是我想要的效果。
C/A/B/* 和问题中的 A/B 不匹配。
事实上,我没有搞清楚你的需求到底是什么,参考 http://www.beiww.com/doc/oss/smart-questions.html
如果可以,请看下我新编辑的顶楼贴?(不过我好像找到办法了)
离线
第三级只有文件没有目录?那这样
mv */*/* .
rmdir --ignore-fail-on-non-empty -p */*
离线