相关疑难解决方法(0)

如何通过 scp 最好地复制大量小文件?

我有一个目录,里面有几 GB 和几千个小文件。我想用 scp 在网络上复制它不止一次。源机器和目标机器上的 CPU 时间很便宜,但是单独复制每个文件所增加的网络开销是巨大的。我会将它 tar/gzip 并运送过来,但源计算机磁盘不足。

有没有办法tar -czf <output> <directory>将 scp的输出通过管道传输?如果没有,还有其他简单的解决方案吗?我的源机器很古老(SunOS),所以我不想在上面安装东西。

scp tar

71
推荐指数
5
解决办法
8万
查看次数

/dev/stdin、/dev/stdout 和 /dev/stderr 的可移植性如何?

有时,我需要指定标准 IO 流 ( stdin, stdout, stderr)之一的“等效路径” 。因为我 99% 的时间都在使用 Linux,所以我只是/dev/在准备 get/dev/stdin等,而这“似乎做对了”。但是,一方面,我一直对这样的理由感到不安(因为,当然,“它似乎有效”,直到它没有为止)。此外,我对这种操作的便携性没有很好的了解。

所以我有几个问题:

  1. 在Linux中的情况下,它是安全(是/否)划上等号stdinstdout以及stderr/dev/stdin/dev/stdout/dev/stderr

  2. 更一般地说,这个等价物是否“足够便携”?

我找不到任何 POSIX 参考。

io file-descriptors posix portability

69
推荐指数
4
解决办法
2万
查看次数

`-` 只与 cd 一起使用吗?

cd - 可以在当前目录和上一个目录之间切换。

似乎我以前见过-用作其他命令的参数,但我不记得 if-cd.

我发现这-不适用于ls.

- 只用cd吗?

options cd-command arguments

45
推荐指数
5
解决办法
3633
查看次数

相对文件路径前面的“./”的实际用途是什么(在“find”的输出中)?

./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声明来证明这个问题?

command-line find filenames unix-philosophy

10
推荐指数
3
解决办法
5555
查看次数

使用来自 stdin 的文件列表调用 tar 的便携式方法

我想从目录的内容创建一个 .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 …

tar io-redirection options busybox stdin

8
推荐指数
2
解决办法
3400
查看次数

管道 - 将管道插入字符串中间

如何使管道将字符插入字符串的中间?这是我的示例(运行 Raspian):

hostname -I | sudo python ~/testsite/manage.py runserver {the ip from the first command}:80

这可能吗?另外,请注意,我不想使用静态 IP。

bash pipe

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

“crontab -”的功能

我正在编写一个 bash 脚本,除其他外,它将在另一台服务器上编辑 crontab。我想出如何做到这一点的方法是:

crontab -l | sed <stuff> | crontab -
Run Code Online (Sandbox Code Playgroud)

它完成了我需要它做的事情,但我仍然不确定如何做。“crontab -”究竟是做什么的?当我从 shell 自己运行它时,它会接管 shell,直到我按下 ctl+c,但似乎什么也没做。它的唯一目的是用从 stdin 传递的任何内容覆盖 cron 内容吗?我似乎找不到任何关于它的文档。

scripting cron pipe

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

为什么引用时无法访问名为“-”的文件?

我有一个名为-.

我想显示它的内容。

一种方法是做

cat ./-
Run Code Online (Sandbox Code Playgroud)

因为cat -从标准输入读取。但是,为什么cat "-"cat '-'还解释由shell作为cat -

shell quoting cat

2
推荐指数
2
解决办法
685
查看次数