我有一个目录,里面有几 GB 和几千个小文件。我想用 scp 在网络上复制它不止一次。源机器和目标机器上的 CPU 时间很便宜,但是单独复制每个文件所增加的网络开销是巨大的。我会将它 tar/gzip 并运送过来,但源计算机磁盘不足。
有没有办法tar -czf <output> <directory>将 scp的输出通过管道传输?如果没有,还有其他简单的解决方案吗?我的源机器很古老(SunOS),所以我不想在上面安装东西。
有时,我需要指定标准 IO 流 ( stdin, stdout, stderr)之一的“等效路径” 。因为我 99% 的时间都在使用 Linux,所以我只是/dev/在准备 get/dev/stdin等,而这“似乎做对了”。但是,一方面,我一直对这样的理由感到不安(因为,当然,“它似乎有效”,直到它没有为止)。此外,我对这种操作的便携性没有很好的了解。
所以我有几个问题:
在Linux中的情况下,它是安全(是/否)划上等号stdin,
stdout以及stderr用/dev/stdin,/dev/stdout和
/dev/stderr?
更一般地说,这个等价物是否“足够便携”?
我找不到任何 POSIX 参考。
cd - 可以在当前目录和上一个目录之间切换。
似乎我以前见过-用作其他命令的参数,但我不记得 if-与cd.
我发现这-不适用于ls.
是- 只用cd吗?
./file为什么有些相对文件路径以, 而不是仅仅以 的形式显示file?例如,当我这样做时:
find .
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
./file1
./file2
./file3
Run Code Online (Sandbox Code Playgroud)
除了让道路更加混乱之外,实际目的是什么?这并不是说它可以阻止我发生一些事故。两者都是相对路径,并且cat ./file1工作方式与 相同cat file1。
这种行为是来自find命令,还是某个系统范围的 C 库?
好的,我明白为什么使用./filefor-exec构造是必要的(以确保我有... | xargs rm ./-i, 而不是... | xargs rm -i)。
但是在什么情况下./使用-print语句时缺少会破坏任何东西呢?
我正在尝试构建任何破坏某些内容的语句:
touch -- -b -d -f -i
find -printf '%P\n' | sort
-b
-d
-f
-i
Run Code Online (Sandbox Code Playgroud)
一切正常。
出于好奇,我如何构建一个-print声明来证明这个问题?
我想从目录的内容创建一个 .tgz。我还想./从 tar'ed 内容中去除领先的“ ”。
我这样做了如下:
cd /path/to/files/ && find . -type f | cut -c 3- | xargs czf /path/to/tgz/myTgz.tgz
Run Code Online (Sandbox Code Playgroud)
我最近了解到 usingxargs可能不是解决这个问题的最佳方法,因为如果 cmdline arg 列表太长,xargs可能会调用tar多次,我被建议利用tar's 从标准输入读取输入文件列表的能力。我最终找到了这篇关于如何做到这一点的文章。但是,我发现建议...
cd /path/to/files/ && find . -type f | cut -c 3- | tar czf foo.tgz -T -
Run Code Online (Sandbox Code Playgroud)
......似乎不便携。它在我的开发 PC 上运行良好,但在一个 busybox 目标上,运行相同的命令时出现以下错误:
tar: can't open '-': No such file or directory
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:是否有一种真正可移植/全局的方式来调用tar以.tgz …
如何使管道将字符插入字符串的中间?这是我的示例(运行 Raspian):
hostname -I | sudo python ~/testsite/manage.py runserver {the ip from the first command}:80
这可能吗?另外,请注意,我不想使用静态 IP。
我正在编写一个 bash 脚本,除其他外,它将在另一台服务器上编辑 crontab。我想出如何做到这一点的方法是:
crontab -l | sed <stuff> | crontab -
Run Code Online (Sandbox Code Playgroud)
它完成了我需要它做的事情,但我仍然不确定如何做。“crontab -”究竟是做什么的?当我从 shell 自己运行它时,它会接管 shell,直到我按下 ctl+c,但似乎什么也没做。它的唯一目的是用从 stdin 传递的任何内容覆盖 cron 内容吗?我似乎找不到任何关于它的文档。
我有一个名为-.
我想显示它的内容。
一种方法是做
cat ./-
Run Code Online (Sandbox Code Playgroud)
因为cat -从标准输入读取。但是,为什么cat "-"和cat '-'还解释由shell作为cat -?