在Linux系统上,我想循环访问记忆棒上的一堆文件,将文件复制到硬盘上,然后将记忆棒上的文件移动到同一记忆棒中的另一个目录中。
我想要asynchronous地做,只要我能同时做很多事情,但是我需要知道每个人什么时候完成,然后我可以移动它们。
这同步运作良好(假设所有的记忆棒已经安装):
for FILE in /home/drive_*; do cp $FILE $DESTINATION mv $FILE "otherDir/"$FILE done
所以这是好的,它一次只能处理一个文件,如果文件很大,需要一段时间。 我怎样才能asynchronous做到这一点?
我如何做一个非阻塞读取pipe道在Perl中?
在本地函数callback线程上运行asynchronous任务继续
我需要一个来自glibc的asynchronous信号安全函数列表
更多投票()?的
(UWP)WebClient并从URL中下载数据
我知道我可以在复制文件的时候添加& ( cp $FILE $DESTINATION & ),但是如何知道什么时候完成了,然后我可以移动它?
如何为ReadFileEx()的完成例程提供上下文信息?
libmemcached – memcached_mget似乎阻塞
只是要清楚,你想复制然后移动,以便这些任务是同步的。 在你做这些任务的同时,你还想继续做其他的任务(更多的复制然后移动)。
我相信以下是你所寻求的:
for FILE in /home/drive_* do (cp $FILE $DESTINATION && mv $FILE "otherDir/"$FILE &) done
你可以看到cp和mv是顺序的,但是执行继续。
我应该注意到,我怀疑你会看到使用这个表现有任何改善,它可能会变得更糟。 磁盘的读取和写入相对较慢,磁盘可能无法一次读取和写入多个文件。 我会建议只是坚持一个连续的脚本。
你只需要将你的指令分组到一个bash函数中,然后把它放在后台(异步调用)。
$ function xxx { sleep $1; echo $2; } $ xxx 5 "long file" & [1] 10704 $ xxx 2 "short file"& [2] 10706 $ wait <here it is waiting for both process to be completed> short file long file [1]- Done xxx 5 "long file" [2]+ Done xxx 2 "short file"
function cp_and_move { cp $1 $2 mv $1 "otherDir/"$1 } for i in /home/drive_*; do cp_and_move $FILE $DESTINATION & done; wait
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。