linux 下使用 cp 指令遇到问题

2015-05-18 15:30:55 +08:00
 sisyphus60

执行一段指令如下:复制一个文件夹A下所有的文件(不要文件夹),碰巧A下有一个文件夹名字为cache,有一个文件名字叫cache.img。在服务器上测试工作正常,在搭建的Hudson环境中运行该指令不行,遇到cache文件时会报错:omitting directory

ls $dir|grep -v "^d"|grep -v "zip$"|while read i
do
cp $dir/$i $dest/$container
done

请问这是什么节奏,我查看Hudson中bash的版本和服务的bash版本是一致的。这个情况怎么破?

2444 次点击
所在节点    Linux
5 条回复
czheo
2015-05-18 15:44:06 +08:00
ls后面加-l
sisyphus60
2015-05-18 18:34:02 +08:00
@czheo 为什么会这样呢?
czheo
2015-05-18 18:40:54 +08:00
你在开发机上输入type ls看看,有提示
extreme
2015-05-18 23:58:59 +08:00
我觉得奇怪,ls只显示文件名吧,后面的过滤根本不起作用。
cp不带-a复制带内容的文件夹就会出现那个提示,也就是跳过该文件夹,不处理。
试试这个:
OLD_PATH="被复制的文件所在的文件夹"
NEW_PATH="复制到的文件夹"
for i in $(find ${OLD_PATH} -type f -maxdepth 1)
do
cp ${i} ${NEW_PATH} && echo "Copy ${i} to ${NEW_PATH} successfully." || echo "Copy ${i} to ${NEW_PATH} unsuccessfully."
done
sisyphus60
2015-05-20 18:00:03 +08:00
@extreme 已经搞定,多谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/191938

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX