几年前我曾与一位 linux 专家合作,他做了这个绝妙的把戏。他可以执行mysqldump 但将输出重定向到 scp/ssh 连接而不是写入磁盘。我们在我以前工作的地方稍微利用了这种安静,但我不记得如何做到这一点了。
我现在面临的问题是我的服务器中的硬盘驱动器处于最后阶段,并且出于密集目的,永久安装为只读。
我希望利用这个命令行技巧仍然能够将我的数据库备份到新服务器上,因为将转储写入本地磁盘并传输它显然是不可能的。
这实际上是一个小技巧吗?如果是这样,语法是什么?
我已经意识到由于只读文件系统问题,我什至无法连接到 mysql 进行转储。但是您的反馈很棒,希望将来对其他人有用
我想使用 cURL将输出uptime和df命令发送到网络应用程序。我试过:
uptime | curl http://someurl.com -T -
Run Code Online (Sandbox Code Playgroud)
但这似乎没有发送数据。
将命令的输出作为 POST 参数发送到 cURL 的正确方法是什么?(或者 wget 如果这更容易)
ftp 支持将put "|..." "remote-file.name"数据通过管道传输到 ftp 连接的命令。sftp 有类似的东西吗?
在 sftp 中,我收到以下错误:
sftp 'jmw@backupsrv:/uploads'
sftp> put "| tar -cx /storage" "backup-2012-06-19--17-51.tgz"
stat | tar -cv /storage: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如上所述,sftp 客户端显然没有执行命令。
我想使用管道命令直接将文件流重定向到 sftp。(因为在将其上传到 sftp 服务器之前,没有足够的空间在同一磁盘上创建备份文件。)
我知道cat可以连接文件,但我需要连接文件和流的混合并将结果通过管道传输到另一个进程。
为了使问题更具体,我想将它cat abc.sql与gzip -dc xyz.sql.gzand连接在一起,并将cat qvf.sql其作为单个流通过管道传输到mysql.
实现这一目标的最佳方法是什么?
我有一组 100 个日志文件,使用 gzip 压缩。我需要找到与给定表达式匹配的所有行。我会使用 grep,但当然,这有点像一场噩梦,因为我必须一个一个地解压缩所有文件,grep 它们并删除解压缩的版本,因为如果它们不适合我的服务器都被解压了。
任何人都有关于如何快速完成的小技巧?
目标是从 stdin 读取 zip 文件并解压缩到 stdout。
Funzip 有效并且是我正在寻找的解决方案,zip 包含一个文件,不幸的是,当压缩文件大小约为 1GB 或更大时,funzip 会失败:
funzip error: invalid compressed data--length error
Run Code Online (Sandbox Code Playgroud)
更新:我发现上述错误可能并不表示实际错误。比较两个未压缩的文件,一个是传统解压缩,另一个是通过管道使用 funzip(将上述错误写入 stderr),这些文件是相同的。我想保持这个开放,所以这可以被确认或报告。
使用python的相关解决方案: 解压缩通过管道飞入的文件
然而,这个输出被定向到一个文件。
我刚跑
cat /opt/webapplications/Word/readme.log | grep -v 'Apple'
Run Code Online (Sandbox Code Playgroud)
并且我在 cli 上得到了我期望的输出,其中的所有行readme.log都不包含 ' Apple'...
接下来我跑...
cat /opt/webapplications/Word/readme.log | grep -v 'Apple' > /opt/webapplications/Word/readme.log
Run Code Online (Sandbox Code Playgroud)
然而,/opt/webapplications/Word/readme.log是空白。
任何人都可以向我解释为什么会发生这种情况,或者我应该采取的正确方法吗?
如何沿管道动态更改文件?
我可能正在寻找一种在管道开头缓冲文件的方法,与此相反:
cat foo.txt | grep bar > foo.txt
Run Code Online (Sandbox Code Playgroud)
... 将保护输入数据不被管道本身破坏。库存有这样的缓冲吗?
假设我有一个名为 jobs.csv 的文件,我希望由 Foo 完成前 50k 项工作
我可以这样做:
# cat jobs.csv | sort -u | head -n 50000 > /tmp/jobs.csv
# cat /tmp/jobs.csv | while read line; do Foo --job=$line; done
Run Code Online (Sandbox Code Playgroud)
或者
# cat jobs.csv | sort -u | head -n 50000 | while read line; do Foo --job=$line; done
Run Code Online (Sandbox Code Playgroud)
在系统的 IO/内存效率方面,谁能说出哪个更好?
或者更好的是,可以为此提出更好的解决方案吗?
我想将压缩的 mysql 转储传输到 s3。
我试过:
mysqldump -u root -ppassword -all-databases | gzip -9 | s3cmd put s3://bucket/sql/databases.sql.gz
Run Code Online (Sandbox Code Playgroud)
但后来我得到:
ERROR: Not enough paramters for command 'put'
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点(在一行中)?