我有一个简单的命令,几乎可以完成我想要的操作。以下将定位所有后缀为“_compressed.swf”的文件,并将每个文件复制到其同一个目录中,并附加“.bak2”:
find '../content' -name '*_compressed.swf' -print0 | xargs -0 -I {} cp {} {}.bak2
结果
输入:/content/somefile_compressed.swf
输出:/content/somefile_compressed.swf.bak2
但是,我需要将 '_compressed.swf' 替换为 '_content.swf' 我想使用 find,而不是 cp 上的递归标志以保持一致性。
目标
输入:/content/somefile_compressed.swf
输出:/content/somefile_content.swf
有没有办法只在一行的第一个参数上运行xargs?因此,如果我的输入是 a 的默认输出grep,则如下所示:
./file1 "matching string"
./file2 "matching 2"
Run Code Online (Sandbox Code Playgroud)
我想要做的是在Vim 中使用类似| xargs vim.
我可以告诉xargs只抓取每行的第一个单词吗?
我知道还有其他方法可以做到这一点,包括通过管道连接到AWK以去除所有多余的行垃圾,以及让 grep 仅返回文件名 - 我很好奇您是否可以使用 xargs 来做到这一点。
在 Mac OS X 中测试 John the Ripper 作为 RAR 密码恢复解决方案,但 xargs 给了我一个错误:
john --incremental:all --stdout | xargs -I jtr unrar e -pjtr -inul test2.rar | grep 100%
xargs: unterminated quote
Run Code Online (Sandbox Code Playgroud)
但是当我将 '-0' 添加到 xargs 以处理引用时,我收到另一个 xargs 错误:
john --incremental:all --stdout | xargs -0 -I jtr unrar e -pjtr -inul test2.rar | grep 100%
xargs: insufficient space for argument
Run Code Online (Sandbox Code Playgroud)
我想这是因为 '-0' 阻止 xargs 使用换行符作为分隔符,这造成了空间问题?
关于如何让 xargs 快乐的任何想法?有没有办法在保持换行符完整的同时解决引号问题?
我在我自己的网站上有一长串 url,列在一个回车分隔的文本文件中。所以例如:
我需要生成许多并行 wget 来两次访问每个 URL,检查并检索特定的标头,然后将结果保存在一个数组中,我想在一个不错的报告中输出该数组。
通过使用以下 xargs 命令,我获得了我想要的部分内容:
xargs -x -P 20 -n 1 wget --server-response -q -O - --delete-after<./urls.txt 2>&1 | grep Caching
Run Code Online (Sandbox Code Playgroud)
问题是如何运行此命令两次并存储以下内容:
所以输出应该是这样的:
=====================================================
http:/www.mysite.com/url1.html
=====================================================
First Hit: Caching: MISS
Second Hit: Caching: HIT
=====================================================
http:/www.mysite.com/url2.html
=====================================================
First Hit: Caching: MISS
Second Hit: Caching: HIT
Run Code Online (Sandbox Code Playgroud)
等等。
只要标题与 URL 相关联,URLS 出现的顺序就不一定是一个问题。
由于 URL 的数量,我需要并行而不是串行访问多个 URL,否则将花费太长时间。
诀窍是如何获得多个并行 wget 并以有意义的方式存储结果。如果有更合乎逻辑的方法(也许写入日志文件?)
有没有 bash 大师对我如何继续提出任何建议?
如果目录树包含一个根据jsonlintNPM 包无效的 JSON 文件,我想使构建失败。
我认为这就像运行一样简单:
find . -name \*.json | xargs jsonlint -q
Run Code Online (Sandbox Code Playgroud)
我知道我在磁盘上有一个格式错误的 JSON 文档,但这并没有找到它。
进一步调查显示该find命令按预期工作,但是该jsonlint可执行文件仅被调用一次(并且第一个 JSON 文件是正确的。)
有没有更好的方法来做到这一点,或者我需要在xargs这里学习什么?
我正在运行 Ubuntu 13.10 Server,如果需要,可以安装软件包。
默认情况下,xargs将连接其输入的许多行,然后传递给指定的命令。例如:
echo -e 'line 1\nline 2\nline 3' | xargs echo
Run Code Online (Sandbox Code Playgroud)
结果是
line 1 line 2 line 3
Run Code Online (Sandbox Code Playgroud)
由于参数被发送到单个 echo 命令(在命令行长度的限制内)。
有时您想使用替换字符串将参数放在命令中的其他位置,而不是末尾:
echo -e 'line 1\nline 2\nline 3' | xargs -Ix echo x DONE
line 1 DONE
line 2 DONE
line 3 DONE
Run Code Online (Sandbox Code Playgroud)
现在,xargs 每次 echo 调用只替换一个参数,因为正如手册页所说“-I 意味着 -L 1...”。这可能是典型情况下的正确行为,但是有什么方法可以覆盖它,以便我得到line 1 line 2 line 3 DONE输出吗?
请注意,我的示例只是说明性的 - 我对解决此问题的非 xargs 方法不太感兴趣。
这似乎是一个微不足道的问题,但解决方案让我如此谨慎。
我想清除很多文本文件;日志文件。原因?为了节省磁盘空间。
使用一个文本文件,这很简单 echo '' > path/to/file.txt
但是,文件很多。我已经求助于使用find和xargs。但我不知道如何绕过“输入重定向”。
我试过find . -name <regex> | xargs -I target echo '' > target和echo '' > { find . -name <regex> | xargs -I target target }; 没有工作
我不精通 shell 脚本,不胜感激。
谢谢。
我想在后台运行此命令,因为该过程可能需要很长时间。如何将其发送到后台进程?
find /tmp/ -type f -mtime +3 | xargs rm -Rf
Run Code Online (Sandbox Code Playgroud)
这不起作用:
find /tmp/ -type f -mtime +3 | xargs rm -Rf &
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
我正在运行 Mac 10.7.5。在终端中,我将使用此命令查找带有字符串的文件
find src/main -name "*" | xargs grep -i 'mystring'
Run Code Online (Sandbox Code Playgroud)
但是,当文件包含空格时,我会得到类似的结果
grep: images/mystuff/essential-questions-selected-arrow-ela: No such file or directory
grep: 5.24.38: No such file or directory
grep: PM.png: No such file or directory
Run Code Online (Sandbox Code Playgroud)
上面例子中的实际文件是“essential-questions-selected-arrow-ela 5.24.38 PM.png”即使被搜索的文件包含空格,我如何成功运行上述命令?
计划是将 Java 的所有源代码行递归地收集到一个文件中:
$ find . -name '*.java' | xargs cat >> all.java
Run Code Online (Sandbox Code Playgroud)
但是出现了一个错误:
cat: ./all.java: input file is output file
Run Code Online (Sandbox Code Playgroud)
该文件all.java在此命令之前不存在,所以我认为可能xargs正在尝试运行cat >> all.java file1 file2 file3 ...