我是 shell 编程的新手,不知道如何解决这个问题。
我刚刚从网上下载了一个文件到默认目录~/Downloads。我想将该文件移动到另一个目录~/Documents.
由于我不知道下载文件的确切名称,我想我可以使用以下命令来实现我的目标:
ls -t ~/Downloads | head -1 | mv [source] [destination]
Run Code Online (Sandbox Code Playgroud)
如何指定要替换的形式参数。就我而言,我想省略[source]并填写我自己的[destination]参数~/Documents。
当您通过管道less传输某些内容时,程序通常会丢弃颜色代码,因为它不会输出到 TTY。因此,您必须添加--color=always选项才能使其工作。
ls -l --color=always | less
grep -R asdf --color=always | less
Run Code Online (Sandbox Code Playgroud)
更糟糕的是,有时甚至不支持该选项,因此实际上无法强制将颜色输出到管道。
有没有(相对)简单的方法来减少对 TTY 的模拟,这样我就不必--color=always在通过管道传输到每个程序时指定每个程序,并且它会在可能的情况下自动显示颜色输出?
下午好,
(OS X 用户)
我特别想将我输入的每个 shell 命令的输出通过管道传输到 ruby gem 'lolcat'(这使得输出到终端彩虹色)。
有没有办法在不单独显式别名命令的情况下做到这一点?我在想也许有一种方法可以在按下返回键之前通过管道传输任何内容,但我不确定如何执行此操作。
感谢您的帮助,因为我厌倦了在终端中只看一种颜色。
当我跑
curl | tee test.txt; echo ${PIPESTATUS[0]}
Run Code Online (Sandbox Code Playgroud)
我正确地看到
curl:尝试“curl --help”或“curl --manual”以获取更多信息
2
但是当我尝试使用“/bin/sh”运行完全相同的命令时:
sh -c "curl | tee test.txt; echo \${PIPESTATUS[0]}"
Run Code Online (Sandbox Code Playgroud)
我得到
curl:尝试“curl --help”或“curl --manual”以获取更多信息
sh: 1: 替换错误
Bad substitution请问我们如何解决问题?
我有一个包含大约 20K 个文件的文件夹。这些文件根据模式命名xy_{\d1,5}_{\d4}\.abc,例如xy_12345_1234.abc. 我想使用以下命令压缩其中的前 10K:
ls | sort -n -k1.4,1.9 | head -n10000 | xargs tar -czf xy_0_10000.tar.gz
但是生成的文件里面只有大约 2K 个文件。
ls | sort -n -k1.4,1.9 | head -n10000 | wc -l 然而,正如预期的那样返回 10000。
在我看来,我在这里误解了一些基本的东西......
我在 Linux Mint 17.1、GNU tar 1.27.1 上使用 zsh 5.0.2
编辑:
@Archemar 建议的分叉听起来很合理,最新的分叉覆盖了生成的文件 - 该文件包含文件的“尾部” - 7773到9999。
结果xargs --show-limit:
Your environment variables take up 3973 bytes
POSIX upper limit on argument length (this system): 2091131
POSIX smallest …
我正在连接到许多使用相同 IP 地址的设备。当我将它们插入路由器时,我收到警告消息REMOTE HOST IDENTIFICATION HAS CHANGED!,ssh-keygen -f "/home/xxx/.ssh/known_hosts" -R "xx.xx.xx.xx"如果我仍想与远程主机连接,则需要运行。
我目前的策略:
ssh-keygen -f "/home/xxx/.ssh/known_hosts" -R "xx.xx.xx.xx".bash_profile.xx.xx.xx.xx需求是可配置的。由于您无法为别名提供参数(至少我是这么认为的),因此我尝试使用以下方法解决它read:
$ alias ssh-keyrm='read LAST_SSH_IP_ADDRESS_CLEARED && ssh-keygen -f "$HOME/.ssh/known_hosts" -R "$LAST_SSH_IP_ADDRESS_CLEARED"'
$ ssh-keyrm
xx.xx.xx.xx
Run Code Online (Sandbox Code Playgroud)
关于如何进一步优化它的任何建议?
我想使用 BCP(批量复制程序)从 SQL Server 2005 数据库编写一个大型数据集。
理想情况下,我想执行以下操作:
bcp MyDatabase..MyTable OUT STDOUT -c -t, |gzip -c c:\temp\dataset.csv.gz
Run Code Online (Sandbox Code Playgroud)
然而,BCP 只是将其写入名为 STDOUT 的文字文件。
我也试过:
bcp MyDatabase..MyTable OUT CON: -c -t, |gzip -c c:\temp\dataset.csv.gz
Run Code Online (Sandbox Code Playgroud)
但这会返回和错误Error = [Microsoft][SQL Native Client]Unable to open BCP host data-file。
那么,我可以在任何地方创建命名管道吗?我在网络上看到了一些提示,以某种方式从gzip一端绑定到一个文件名,如 \\.\ named_pipe - 但这是如何完成的?
更新:请注意,微软自己承认他们真的不关心 SQL Server 的效率:http ://connect.microsoft.com/SQLServer/feedback/details/337702/support-bcp-out-in-and-bulk-至少插入压缩或命名管道支持
我可以通过 rsync 协议访问备份服务器(只有 rsync,没有别的)。现在,我想从那里获取文件(即 .tar.gz)并将其直接传递给 tar 命令,而不将存档保存在本地文件系统中。
为了形象化,通过 ssh 访问,我可以:
ssh remote_host cat backup.file.tar.gz | tar xzf -
Run Code Online (Sandbox Code Playgroud)
我将在本地获得未压缩的备份,而无需将 .tar.gz 实际存储在本地机器上。
使用rsync时可以实现吗?
我有一个 HTTP 端点,可以提供无限的事件流。现在我想使用 curl 记录该流,但同时拆分记录的文件 - 最好基于行号以防止损坏。
我试过 split,但似乎 split 在输入流结束之前什么都不做。
这是我的命令:
stdbuf -oL curl -s http://... | split -l1 - record.chunked.
Run Code Online (Sandbox Code Playgroud)
用于测试:以下命令尝试将 ping 命令的结果拆分为每个文件 1 行的文件。但它不起作用。
ping localhost | split -l1 - out.
Run Code Online (Sandbox Code Playgroud)
是否有另一种(精益,简单,最好没有脚本)的方法来做到这一点?