标签: xargs

换行符分隔的 xargs

是否可以xargs使用换行符作为分隔符?(如果重要的话,在 Linux 和 OS X 上的 bash 中)

我知道-0可以使用,但它是 PITA,因为并非每个命令都支持 NUL 分隔的输出。

linux bash xargs

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

防止 xargs 在出错时退出

根据手册页,如果执行行之一以 255 错误退出,则 xargs 将退出:

如果命令的任何调用以 255 的状态退出,xargs 将立即停止而不读取任何进一步的输入。发生这种情况时,会在 stderr 上发出错误消息。

我怎样才能让 xargs这样做?

我有一个大约 1500 行的批处理作业,我想一次运行 50 行。我发现它总是在某条生产线上死亡,并且没有完成工作。不好!

一个更好的问题,描述我正在尝试做的事情的问题是:

我怎样才能运行一个 1500 行的批处理脚本,一次 50 行,这样它就不会在中间退出作业,并将输出捕获到某种日志文件中?

bash command-line-interface batch-processing xargs

34
推荐指数
6
解决办法
3万
查看次数

在查找结果中使用 xargs 时,如何处理文件名中的空格?

我的一个常见做法是对某种类型的所有文件执行 grep,例如,找到所有包含“rumpus”一词的 HTML 文件。为此,我使用

find /path/to -name "*.html" | xargs grep -l "rumpus"
Run Code Online (Sandbox Code Playgroud)

有时,find会返回名称中带有空格的文件,例如my new file.html. 但是,当xargs将此传递给grep时,我收到以下错误:

grep: /path/to/bad/file/my: No such file or directory
grep: new: No such file or directory
grep: file.html: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我可以看到这里发生了什么:管道或xargs正在将空格视为文件之间的分隔符。但是,对于我的一生,我无法弄清楚如何防止这种行为。可以用find+完成xargs吗?还是我必须使用完全不同的命令?

find grep pipe xargs

31
推荐指数
3
解决办法
2万
查看次数

使用 xargs 时重定向到 stdin 而不是参数

例如,使用命令

cat foo.txt | xargs -I{} -n 1 -P 1 sh -c "echo {} | echo"
Run Code Online (Sandbox Code Playgroud)

foo.txt包含两行

foo
bar
Run Code Online (Sandbox Code Playgroud)

上面的命令不打印任何内容。

linux bash command-line-interface xargs

15
推荐指数
2
解决办法
6962
查看次数

应用多个 .patch 文件

我有一个包含.patch文件的目录,使用 diff 生成。

我想将所有这些补丁应用patch -p1到另一个目录。

但是补丁只需要一个文件,除非我cat.

使用xargs或类似工具应用多个文件的命令是什么。

bash patch diff xargs

11
推荐指数
3
解决办法
3万
查看次数

使用 xargs 跟踪进度

我正在使用 xargs 在一组输入参数上执行命令,如下所示:

cat <someinput> | xargs -n 1 -P 5 <somecmd>
Run Code Online (Sandbox Code Playgroud)

输入文件真的很长,需要很长时间才能运行。所以我只是在等待命令提示符出现。有没有办法显示已完成的输入参数数量的进度条?

我尝试使用“bar”,但我总是得到“无限”的吞吐量。似乎 xargs 在执行命令之前读取整个输入。

http://i.stack.imgur.com/5Wsgx.gif

command-line-interface xargs

11
推荐指数
3
解决办法
5531
查看次数

如何使用 curl 和 xargs 下载存储在文本文件中的多个文件?

如何使用 curl 和 xargs 下载存储在文本文件中的多个文件?这是我最后一次试验:

cat listfile.txt | xargs curl -O
Run Code Online (Sandbox Code Playgroud)

第一个文件运行良好,但其他文件只是输出到标准输出。

xargs curl

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

在 UNIX shell 脚本中查找所有公共 IPv4 和 IPv6 地址

出于监控目的,我想找出移动战士 UNIX 机器的所有公共 IPv4 和 IPv6 地址。

请注意,这与在 shell 脚本中查找公共 IP 地址不同,因为有以下额外要求:

  • 移动战士本身可能根本没有任何公共 IPv4 地址;
  • 它可能有也可能没有 IPv6(但我们只对将在实际传出连接中使用的活动连接感兴趣);
  • 底层互联网连接可能是负载平衡的,细节未知,其中 UDP、TCP、ICMP 和源/目标 IP 地址的组合可能决定使用哪个上游;我们需要尽力找出所有此类 IP 地址,以全面了解网关的底层 Internet 连接,而无需直接访问网关本身。

ipv6 load-balancing ip-address xargs ipv4

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

将多行 STDIN 输入提供给命令

我有一个输出 git 存储库 SSH URL 的脚本,如下所示:

git@example.com:namespace/project.git
git@example.com:another_namespace/some_other_project.git
Run Code Online (Sandbox Code Playgroud)

git clone我想为每一行运行命令(或其他命令)。

我尝试将其通过管道传输到xargs,但我要么在一行中获得输出,要么将多行输入转储到单个命令。

如何通过管道在每一行上运行任意命令?

bash xargs

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

rm {} + 有什么作用?

find -L /etc/ssl/certs/ -type l -exec rm {} +
Run Code Online (Sandbox Code Playgroud)

所以它会找到所有损坏的符号链接并删除它们。但我究竟如何解释这{} +部分?

unix find xargs

3
推荐指数
2
解决办法
6699
查看次数

从 find 和 xargs 中删除 -print0 和 -0 标志

大约 10 年前,我问过这个问题

在 linux 中递归使用 SED?

并得到了这个有用的命令 find . -type f -print0 | xargs -0 sed -i 's/regex_search_term/replace_term/g'

我决定更多地了解find,xargssed语句。在 bash 版本 4.4.20(1)-release 的 Ubuntu 18.04 上,我可以将语句简化为:

find . -type f -print | xargs sed -i 's/regex_search_term/replace_term/g'

然后可以再次简化为:

find . -type f | xargs sed -i 's/regex_search_term/replace_term/g'

所以我的问题是,是否有任何缺点不使用-print0标志和 -0国旗find,并xargs分别?-print完全放弃标志有什么缺点吗?它们是否明确用于与不同的类 Unix 系统兼容?

bash find xargs

2
推荐指数
1
解决办法
187
查看次数

使用 xargs SSH 到服务器

我有一个很简单的问题,我想在这里解决。我不断在域上运行 (host) 命令以获取它们的 IP,然后再次在这些 IP 上运行 (host) 命令以获取它们的 PTR,然后我通过 SSH 连接到 PTR 中表示的服务器:

[root@box ~]$ host DomainIWant.com
DomainIWant.com has address 123.123.123.123

[root@box ~]$ host 123.123.123.123
123.123.123.123.in-addr.arpa domain name pointer vps2010.DomainIWantHosts.com

[root@box ~]$ ssh vps2010.DomainIWantHosts.com
Run Code Online (Sandbox Code Playgroud)

够简单了吧?一遍又一遍地做这件事很乏味,所以对于所有 Linux 我想通过自动化来加速它:

[root@box ~]$ host DomainIWant.com | awk '{print $4}' | xargs host | awk '{print $5}' | xargs ssh -tt
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我通过 xargs 调用 ssh 时,我确实通过 SSH 连接到远程服务器,但出现错误 [tcgetattr: Invalid argument]。我坐在远程服务器的外壳上,但是当我尝试运行任何命令时,它只是挂起,最终我必须按 Ctrl-C 才能摆脱它。

如果我不添加 (ssh -tt),那么我会收到一个 [Pseudo-terminal will not be allocation because stdin is not …

scripting linux ssh xargs

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

当文件不存在时 tar 太慢了!

我在文本文件中有一个巨大的文件列表。这个列表被传递给 tar,像这样:

猫列表.txt | xargs tar rvf archive.tar --ignore-failed-read

问题是列表中的某些文件不再存在。所以 tar 一直说“无法统计:没有这样的文件或目录......”。我对此没有任何问题,但是当出现其中一些消息时,tar 挂起,并等待几分钟恢复操作,使备份非常缓慢。关于如何仅将现有文件过滤为 tar 的任何想法?

问候

backup tar filter xargs

0
推荐指数
1
解决办法
764
查看次数