(cd $1 ; tar -cf - . ) | (cd $2 ; tar -xvf - )
当我运行它时,主shell应该创build两个进程(子壳)同时执行两组命令。 但是,shell如何确保两个进程都转换到合适的目录,然后将进程的内容打包并发送到第二个进程进行解包?
为什么没有竞争条件? 是否每个进程的每个命令都会按顺序执行,尽pipe进程可以并行?
即第一个进程运行“cd $ 1”,然后第二个进程运行“cd $ 2”(或者它应该与第一个进程同时执行?不确定),那么第一个进程会把所有东西打包,最后发送到第二个进程。
redirect从www域到根域 – 工作,但不完全正确
捕获的数据包长度超过MTU
如何在C中捕获过程输出?
虽然,我不知道关于焦油的一件小事:
tar -cf - .
我知道点(。)是当前目录的内容。 但是,命令中的“ – ”是什么?
什么更好:selectvs线程?
“ulimit -v”如何在Linux操作系统中工作?
为什么我得到未定义的参考pthread_mutexattr_settype?
如何在不重新编译Linux内核的情况下实现自己的系统调用?
SNMP陷阱,必需的OID:sysuptime和id
你不需要使用cd因为tar有一个-C选项,告诉它改变到一个目录。 所以你可以简单地使用一个命令,如:
tar -C $1 -cvf - . | tar -C $2 -xvf -
-意味着标准输入/标准输出。 第一个连字符告诉tar写入标准输出。 第二个告诉tar从标准输入读取。
由于-是默认值,所以您甚至不需要指定它。 您可以缩短您的命令:
tar -C $1 -c . | tar -C $2 -x
由于这些组在独立进程中运行,哪个cd命令首先运行并不重要:每个进程都有自己的工作目录。
所以改变工作目录不会影响其他进程。
你正在管道你的情况下的命令。 你期待的结果对我来说不是很清楚。 顺便说一下,我的GNU tar没有“ – ”这个“-f”选项的值。 所以你的命令可能不是可移植的。