用于重定向stdin或stdout的[破折号,即-]的用法

关于破折号(-)的一个经典用法:用于重定向stdin或stdout

 问题由这条命令引起:
(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xpvf -)
首先做一下解释:
 # 1) cd /source/directory    源目录
 # 2) &&                             "与列表": 如果'cd'命令成功了, 那么就执行下边的命令. 
# 3) tar cf - .           'c'创建一个新文档, 'f'后边跟'-'指定目标文件作为stdout
#                                         '-'后边的'f'(file)选项, 指明作为stdout的目标文件. 
#                            并且在当前目录('.')执行.
# 4) |                               管道...
# 5) ( ... )                            一个子shell
# 6) cd /dest/directory      改变当前目录到目标目录.
# 7) &&                                     "与列表", 同上
# 8) tar xpvf -                       'x'解档, 'p'保证所有权和文件属性,
#                           'v'发完整消息到stdout,
#                                                  'f'后边跟'-',从stdin读取数据. 
#                          
  注意:'x' 是一个命令, 'p', 'v', 'f' 是选项.
 
# 以上的命令实现也可以用更优雅的写法,应该是:
#   cd source/directory
#   tar cf - . | (cd ../dest/directory; tar xpvf -)
#
#     当然也可以这么写:
# cp -a /source/directory/* /dest/directory
#     或者:
# cp -a /source/directory/* /source/directory/.[^.]* /dest/directory
#     如果在/source/directory中有隐藏文件的话.
 
1.关于tar cf - .更易懂点的解释:
tar中的 - 表示stdin或者stdout,当需要将stdin或者stdout作为一个文件名参数来使用时可以使用 - 。
tar cf - . 表示将当前目录也就是 ./ 下的文件都打包生成一个文件,此文件为 - ,并将生成的包文件的二进制内容以字符方式显示到stdout上。
tar xpvf - 表示将从stdin读入的内容全部解压到当前目录下。
e.g.
[root@Tracy source]# tar cvf - .
./
./dire/
./dire/123.txt
./0000755000000000000000000000000011455767215007726 5ustar  rootroot./dire/0000755000000000000000000000000011455770065010646 5ustar  rootroot./dire/123.txt0000644000000000000000000000000011455770065011702 0ustar  rootroot
2.又如以下用法:可以用来将目录下的某些或某个文件打包!
[root@Tracy dire]# tar cvf - 123.txt
123.txt
123.txt0000644000000000000000000000000011455770065010622 0ustar  rootroot[root@Tracy dire]#
[root@Tracy dire]#
[root@Tracy dire]# tar cvf - 123.txt > 123.tar
123.txt
[root@Tracy dire]# ls
123.tar  123.txt

本文出自 “mr.DATABASE” 博客,谢绝转载!

你可能感兴趣的:(职场,-,休闲)