我正在尝试编写一个命令,该命令将空闲命令的连续输出(每秒运行一次)传送到一个 awk 命令,该命令解析特定值(可用空闲内存)并将其输出到带有时间戳的文件中。这是我目前对命令的尝试:
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 }' >>memOut
Run Code Online (Sandbox Code Playgroud)
或者,经过一些谷歌搜索
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 >>"memOut"}'
Run Code Online (Sandbox Code Playgroud)
每次运行都会产生空文件。任何建议或可能不同的方法?
作为了解如何使用管道操作绑定优先级的一种工具,我试图为每个目录打印一个文件的路径:
find $PWD -type d | xargs --delimiter "\n" -I% -n 1 (find % -maxdepth 1 | head -1)
Run Code Online (Sandbox Code Playgroud)
我明白了no matches found: (find % -maxdepth 1 | head -1)。没有括号我会得到xargs: find: terminated by signal 13所以我很确定我们需要以某种方式使管道右关联。
如何将 xargs 输入传递给包含管道的命令?(请不要告诉我使用-exec,我想学习如何操作其他问题的绑定优先级)。
我正在为 Windows 命令提示符编写一个批处理文件,以删除与某个表达式匹配的所有目录。
我首先使用DIR返回匹配表达式的普通目录列表。我想将每一行输出通过管道传输到 RMDIR 命令中,如下所示:
DIR *.delete /A:D /B /S | RMDIR /S /Q
Run Code Online (Sandbox Code Playgroud)
但是上面的命令似乎不起作用。我不完全理解为什么这不起作用,并且会感谢任何可以提供解释的人。
我正在尝试使用此命令获取文件的最后修改日期
TM_LOCAL=`ls -l --time-style=long-iso ~/.vimrc | awk '{ print $6" "$7 }'`
Run Code Online (Sandbox Code Playgroud)
执行此行后,TM_LOCAL 的值类似于“2012-05-16 23:18”
我还想检查 PIPESTATUS 以查看是否有错误。例如,如果文件不存在,则ls返回 2。但$?其值为 0,因为它的返回值为awk。
如果我单独运行这个命令,我可以通过查看 ls 的返回值 ${PIPESTATUS[0]}
ls -l --time-style=long-iso ~/.vimrc | awk '{ print $6" "$7 }'
Run Code Online (Sandbox Code Playgroud)
但是$PIPESTATUS,如果我将输出分配给第一个示例中的变量,则不会像我预期的那样工作。在这种情况下,$PIPESTATUS数组只有 1 个元素,与$?
所以,问题是,我怎样才能同时获得两者$PIPESTATUS并将输出分配给一个变量?
我可以使用以下命令从使用 ffmpeg 的视频中提取图像,并将它们保存到文件系统:
... | ffmpeg -i - -f image2 'img-%03d.png'
Run Code Online (Sandbox Code Playgroud)
我想将这些图像通过管道传输到另一个应用程序,而不是将它们保存到文件系统 - 它们在管道中的分离方式并不重要,因为它将是我自己控制的 NodeJS 脚本。
以下不起作用:
... | ffmpeg -i - -f image2 pipe: | ...
Run Code Online (Sandbox Code Playgroud)
错误与
[image2 @ 0xe1cfc0] Could not get frame filename number 2 from pattern 'pipe:' (either set updatefirst or use a pattern like %03d within the filename pattern)
av_interleaved_write_frame(): Invalid argument
Run Code Online (Sandbox Code Playgroud)
有没有办法在不使用文件系统的情况下使用 ffmpeg 从视频中提取图像?
假设我有一个名为 .bash 的 bash 脚本log.sh。在这个脚本中,我想从管道读取输入,但我也想知道用于将输入管道输入到我的命令。例子:
tail -f /var/log/httpd/error | log.sh
Run Code Online (Sandbox Code Playgroud)
在shell脚本中,我想知道命令tail -f /var/log/httpd/error.
编辑:我想多member01和member02和目录blah/
tarball_1.tar.gz包含test/20 个文件的目录。我只想提取成员test/member01和test/member02目录,blah/并使用 ssh/scp 将它们复制到另一个“remote_host”。
这可以作为单线完成吗?我考虑过使用tar, pax, 或cpio但我想我对这些实用程序还不是很熟练。
一些程序更喜欢在 stderr 中输出帮助消息。我想用grep命令搜索帮助信息,xx /? | grep regex?
我怎么能这样做?
当我跑
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 …