小编all*_*ije的帖子

如何制作远程目录的本地tar文件

链接描述了如何复制 tarred 文件以最大程度地减少通过网络发送的数据量。我正在尝试做一些稍微不同的事情。

我在不同的子目录级别上有许多远程文件:

remote:/directory/subdir1/file1.ext
remote:/directory/subdir1/subsubdir11/file11.ext
remote:/directory/subdir2/subsubdir21/file21.ext
Run Code Online (Sandbox Code Playgroud)

我有一个文件列出了所有这些:

remote:/directory/allfiles.txt
Run Code Online (Sandbox Code Playgroud)

为了最有效地复制它们,我可以在远程站点上做

tar zcvf allfiles.tgz `cat /directory/allfiles.txt`
Run Code Online (Sandbox Code Playgroud)

但没有足够的空间来做到这一点。

我的本地磁盘上确实有足够的存储空间。有没有办法tar从远程服务器(使用scpssh传输)传入流?

就像/localdir$ tar zc - | ssh remote `cat /directory/allfiles.txt` 我猜的那样 - 但这只会列出本地主机上的远程文件。

linux ssh scp tar

9
推荐指数
1
解决办法
1万
查看次数

在 bash 脚本中,括号表示法比反引号更好吗?

当我学习编写 bash 脚本时,我使用反引号将命令的输出放入变量中,例如

ALLPDFS=`find . -name \*.\[pP\]\[dD\]\[fF\]`
Run Code Online (Sandbox Code Playgroud)

但大多数“官方”脚本(在 Linux 软件包中下载的脚本)使用带有美元符号和括号的表示法:

ALLPDFS=$(find . -name \*.\[pP\]\[dD\]\[fF\])
Run Code Online (Sandbox Code Playgroud)

有充分的理由选择其中之一吗?我猜第二个更符合其他 bash 语法。虽然我尝试过计时

time for (( i=0; i<10; i++ )); do  a=`find . -name \*.\[pP\]\[dD\]\[fF\]`; done
time for (( i=0; i<10; i++ )); do a=$(find . -name \*.\[pP\]\[dD\]\[fF\]); done
Run Code Online (Sandbox Code Playgroud)

这没有任何区别。也许有一种更适合堆栈/堆使用吗?

linux bash command-line brackets

1
推荐指数
1
解决办法
271
查看次数

标签 统计

linux ×2

bash ×1

brackets ×1

command-line ×1

scp ×1

ssh ×1

tar ×1