您尚未登录。

#1 2012-08-20 00:47:02

nopriler
会员
注册时间: 2012-01-03
帖子: 393

[已解决] BASH脚本:将A/B/*移动到A/

需求
==========
在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)

离线

#2 2012-08-20 01:09:53

phoenixlzx
晩ご飯だよー
注册时间: 2011-08-19
帖子: 1,789
个人网站

Re: [已解决] BASH脚本:将A/B/*移动到A/

遍历循环什么的我就不写了。

cd A/B/
cp -r * ../
cd ..
rm -rf B/

注意这样不会复制隐藏文件。

不过貌似有更好的办法是通过重命名目录B,这个你可以考虑下。

离线

#3 2012-08-20 01:15:27

nopriler
会员
注册时间: 2012-01-03
帖子: 393

Re: [已解决] BASH脚本:将A/B/*移动到A/

phoenixlzx 说:

遍历循环什么的我就不写了。

cd A/B/
cp -r * ../
cd ..
rm -rf B/

注意这样不会复制隐藏文件。

不过貌似有更好的办法是通过重命名目录B,这个你可以考虑下。

虽然不知道『遍历循环』是什么,但从字面上,感觉它正是我不懂纠结的地方。

最近编辑记录 nopriler (2012-08-20 01:15:40)

离线

#4 2012-08-20 02:32:00

phoenixlzx
晩ご飯だよー
注册时间: 2011-08-19
帖子: 1,789
个人网站

Re: [已解决] BASH脚本:将A/B/*移动到A/

遍历循环就是把某一个目录下的所有目录都过一遍(遍历)的一个循环。。。

既然是多个那么想简单就得用循环了。。。否则就几步的操作也不难啊。

离线

#5 2012-08-20 08:30:03

自由建客
穷若韩信
所在地: 桂林市第六人民医院
注册时间: 2011-08-27
帖子: 250
个人网站

Re: [已解决] BASH脚本:将A/B/*移动到A/

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)

离线

#6 2012-08-20 10:37:02

nopriler
会员
注册时间: 2012-01-03
帖子: 393

Re: [已解决] BASH脚本:将A/B/*移动到A/

怎么感觉这样子不行?
我的意思是,我有60来个A/B/这种结构的文件夹(A1/B1, A2/B2, 等),然后我想把B/*下的东西移到A/下。一个一个手动来很麻烦,我就想知道怎么写个脚本,让它逐一进入每个文件夹并执行移动删除。

离线

#7 2012-08-20 23:54:40

sigma
会员
注册时间: 2012-01-03
帖子: 183

Re: [已解决] BASH脚本:将A/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.

离线

#8 2012-08-21 11:33:17

nopriler
会员
注册时间: 2012-01-03
帖子: 393

Re: [已解决] BASH脚本:将A/B/*移动到A/

A/B/只是模板...实际上那些文件夹的命名是没有规则的。

离线

#9 2012-08-21 22:33:27

sigma
会员
注册时间: 2012-01-03
帖子: 183

Re: [已解决] BASH脚本:将A/B/*移动到A/

nopriler 说:

A/B/只是模板...实际上那些文件夹的命名是没有规则的。

那方法不是一样吗?只不过两个循环咯


riverrun, past Eve and Adam's.

离线

#10 2012-08-22 09:18:41

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: [已解决] BASH脚本:将A/B/*移动到A/

如果所有的 B 都不是空目录的话:

mv */* .
rmdir --ignore-fail-on-non-empty *

离线

#11 2012-08-22 17:49:10

nopriler
会员
注册时间: 2012-01-03
帖子: 393

Re: [已解决] BASH脚本:将A/B/*移动到A/

sigma 说:
nopriler 说:

A/B/只是模板...实际上那些文件夹的命名是没有规则的。

那方法不是一样吗?只不过两个循环咯

恕我愚笨。没有规则要怎么写循环?

离线

#12 2012-08-22 17:50:40

nopriler
会员
注册时间: 2012-01-03
帖子: 393

Re: [已解决] BASH脚本:将A/B/*移动到A/

百合仙子 说:

如果所有的 B 都不是空目录的话:

mv */* .
rmdir --ignore-fail-on-non-empty *

假设我这些文件夹在C/下的话,这个命令岂不是会把C/A/B/*的东西移动到C/?但这不是我想要的效果。

离线

#13 2012-08-22 18:13:35

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: [已解决] BASH脚本:将A/B/*移动到A/

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

离线

#14 2012-08-22 18:27:36

nopriler
会员
注册时间: 2012-01-03
帖子: 393

Re: [已解决] BASH脚本:将A/B/*移动到A/

百合仙子 说:
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

如果可以,请看下我新编辑的顶楼贴?(不过我好像找到办法了)

离线

#15 2012-08-22 18:48:51

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: [已解决] BASH脚本:将A/B/*移动到A/

第三级只有文件没有目录?那这样

mv */*/* .
rmdir --ignore-fail-on-non-empty -p */*

离线

页脚