LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1422|回复: 7

移动文件问题

[复制链接]
发表于 2004-3-31 23:07:28 | 显示全部楼层 |阅读模式
我要把一个目录下面的所有文件移动到它的子目录(a)里,请问怎么做啊?
mv * a/
这样不行哦,cannot move `a' to a subdirectory of itself
发表于 2004-3-31 23:22:33 | 显示全部楼层

回复: 移动文件问题

最初由 alyroot 发表
我要把一个目录下面的所有文件移动到它的子目录(a)里,请问怎么做啊?
mv * a/
这样不行哦,cannot move `a' to a subdirectory of itself

*包含你要移动到的子目录,子目录当然不能覆盖自身啦。
mv $(ls | gawk '{for(i=1;i<=NF;i++){if($i!="a")print $i;}}') a
发表于 2004-4-1 06:40:53 | 显示全部楼层
如果只是文件的话: mv $(find . -type f) a
如果还有其他的子目录的话,还没有一个精简的方法, 到是有个另外的方法做:
mv $(find .| sed s/"\.\/"//g|sed /"\."/d | sed /^a$/d) a
发表于 2004-4-1 06:41:19 | 显示全部楼层
mkdir ../tmpdir ; mv -fi YOU_TARGET_DIR/* . ; rm -fr YOU_TARGET_DIR ; mv ../tmpdir YOU_TARGET_DIR

但如果当前目录是根目录就不行。
发表于 2004-4-1 07:29:14 | 显示全部楼层
ok, a better solution:
mv $(find . \! -name 'a' \-and \! -name .) a
发表于 2004-4-1 07:34:34 | 显示全部楼层
find . \( ! -name 'a' -and ! -name . \) -exec mv {} a \; &>/dev/null
不知道为什么会报一些很傻的std error, 所以pipe到null吧。反正命令是成功的。
发表于 2004-4-1 07:52:35 | 显示全部楼层
如果要不包括所有已.开头的文件:
mv $(find . \! -name 'a'  \! -name '.*'  \! -name .) a
发表于 2004-4-1 07:56:25 | 显示全部楼层
mv $(find . \! -name 'a' \! -name '.*') a
上面的写错了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表