标签: xargs

如何使用 find 将所有找到的文件复制到相同目录中的新名称?

我有一个简单的命令,几乎可以完成我想要的操作。以下将定位所有后缀为“_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

linux bash cp find xargs

5
推荐指数
1
解决办法
8958
查看次数

在一行的第一个单词上运行 xargs

有没有办法只在一行的第一个参数上运行xargs?因此,如果我的输入是 a 的默认输出grep,则如下所示:

./file1       "matching string"
./file2       "matching 2"
Run Code Online (Sandbox Code Playgroud)

我想要做的是在Vim 中使用类似| xargs vim.

我可以告诉xargs只抓取每行的第一个单词吗?

我知道还有其他方法可以做到这一点,包括通过管道连接到AWK以去除所有多余的行垃圾,以及让 grep 仅返回文件名 - 我很好奇您是否可以使用 xargs 来做到这一点。

xargs

5
推荐指数
1
解决办法
7625
查看次数

使用开膛手约翰恢复 RAR 密码

在 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 快乐的任何想法?有没有办法在保持换行符完整的同时解决引号问题?

rar xargs password-recovery macos

5
推荐指数
1
解决办法
7233
查看次数

生成多个并行 wget 并将结果存储在 bash 数组中,以便在所有 wget 完成后打印出来

我在我自己的网站上有一长串 url,列在一个回车分隔的文本文件中。所以例如:

  • http://www.mysite.com/url1.html
  • http://www.mysite.com/url2.html
  • http://www.mysite.com/url3.html

我需要生成许多并行 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)

问题是如何运行此命令两次并存储以下内容:

  1. 网址命中
  2. 针对缓存标头的 grep 的第一个结果
  3. 针对缓存标头的 grep 的第二个结果

所以输出应该是这样的:

=====================================================
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 大师对我如何继续提出任何建议?

linux bash wget array xargs

5
推荐指数
1
解决办法
1831
查看次数

在目录树中检测无效的 JSON 文件

如果目录树包含一个根据jsonlintNPM 包无效的 JSON 文件,我想使构建失败。

我认为这就像运行一样简单:

find . -name \*.json | xargs jsonlint -q
Run Code Online (Sandbox Code Playgroud)

我知道我在磁盘上有一个格式错误的 JSON 文档,但这并没有找到它。

进一步调查显示该find命令按预期工作,但是该jsonlint可执行文件仅被调用一次(并且第一个 JSON 文件是正确的。)

有没有更好的方法来做到这一点,或者我需要在xargs这里学习什么?

我正在运行 Ubuntu 13.10 Server,如果需要,可以安装软件包。

command-line xargs json ubuntu

5
推荐指数
1
解决办法
3031
查看次数

xargs 替换多个参数

默认情况下,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 方法不太感兴趣。

linux bash xargs

5
推荐指数
1
解决办法
4476
查看次数

xargs 参数重定向

这似乎是一个微不足道的问题,但解决方案让我如此谨慎。

我想清除很多文本文件;日志文件。原因?为了节省磁盘空间。

使用一个文本文件,这很简单 echo '' > path/to/file.txt

但是,文件很多。我已经求助于使用findxargs。但我不知道如何绕过“输入重定向”

我试过find . -name <regex> | xargs -I target echo '' > targetecho '' > { find . -name <regex> | xargs -I target target }; 没有工作

我不精通 shell 脚本,不胜感激。

谢谢。

terminal shell-script xargs input

4
推荐指数
1
解决办法
2538
查看次数

在后台运行 find 和 xargs

我想在后台运行此命令,因为该过程可能需要很长时间。如何将其发送到后台进程?

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)

我该怎么做呢?

linux find xargs

4
推荐指数
1
解决办法
2325
查看次数

当其中一些文件包含空格时,如何在一组文件中搜索字符串?

我正在运行 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”即使被搜索的文件包含空格,我如何成功运行上述命令?

unix grep find xargs macos

4
推荐指数
1
解决办法
4207
查看次数

cat “输入文件是输出文件”,同时尝试将多个文件合并为一个

计划是将 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 ...

bash redirection command-line xargs syntax

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