标签: xargs

“xargs grep”有什么作用?

我知道该grep命令并且正在了解 的功能xargs,因此我通读了页面,其中提供了一些有关如何使用该xargs命令的示例。

我对最后一个示例感到困惑,示例 10。它说“xargs 命令执行 grep 命令以查找包含字符串 'stdlib.h' 的所有文件(在 find 命令提供的文件中)”

$ find . -name '*.c' | xargs grep 'stdlib.h'
./tgsthreads.c:#include
./valgrind.c:#include
./direntry.c:#include
./xvirus.c:#include
./temp.c:#include
...
...
...
Run Code Online (Sandbox Code Playgroud)

但是,简单地使用有什么区别

$ find . -name '*.c' | grep 'stdlib.h'
Run Code Online (Sandbox Code Playgroud)

?

显然,我仍在为 xargs 正在做什么而苦苦挣扎,因此感谢您提供任何帮助!

command-line grep xargs

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

管道 find -name 到 xargs 导致文件名没有传递给命令的空格

通常要删除文件名中带有空格的文件,您必须运行:

$ rm "file name"
Run Code Online (Sandbox Code Playgroud)

但如果我想删除多个文件,例如:

$ find . -name "*.txt" | xargs rm
Run Code Online (Sandbox Code Playgroud)

这不会删除其中包含空格的文件。

command-line rm find xargs

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

“xargs”和命令替换之间的区别?

在许多情况下,我使用命令替换而不是xargs. 例如rm $(ls)ls | xargs rm

它们之间的真正区别是什么?

我认为差异之一是命令替换在子shell中xargs运行,而在当前shell中运行,但我不确定。

请列出差异。

bash xargs

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

使用 xargs 删除名称中带有空格的文件夹

为什么 xargs 不能删除名称中带有空格的目录,以及如何解决这个问题?

76 find . -type d |xargs  rm -rf
 77 rm -rf fire\ hydrant/
 78 rm -rf wine\ glass/
 79 rm -rf tennis\ racket/
 80 rm -rf traffic\ light/
 81 rm -rf parking\ meter/
 82 rm -rf teddy\ bear/
 83 rm -rf sports\ ball/
 84 rm -rf cell\ phone/
 85 rm -rf stop\ sign/
 86 rm -rf dining\ table/
 87 rm -rf potted\ plant/
Run Code Online (Sandbox Code Playgroud)

command-line find xargs

12
推荐指数
2
解决办法
2150
查看次数

xargs:不匹配的单引号;默认情况下,引号对于 xargs 是特殊的,除非您使用 -0 选项

我想用命令计算主目录上的所有普通文件:

$ find ~ -type f | xargs echo | wc -w
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
Run Code Online (Sandbox Code Playgroud)

它提示

xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
Run Code Online (Sandbox Code Playgroud)

使用上有什么问题?

xargs

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

如何使用xargs传递要由grep搜索的名称列表?

我有一个包含名称 ( nameslist.txt)的文本文件,我想使用它们读取它们cat并将结果通过管道xargs传递给grep命令,以便grep检查它在目标文件 ( targetfile.txt) 中接收到的每个名称是否存在。

假设targetfile.txt包含大量名称,其中一些名称可能包含在nameslist.txt.

我应该怎么之间添加xargsgrep之间,以及grep./targetfile.txt下面?

cat ./nameslist.txt | xargs grep ./targetfile.txt
Run Code Online (Sandbox Code Playgroud)

谢谢

command-line grep text-processing xargs

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

如何使用 dbus-monitor 和 xargs 解决“不匹配的双引号”错误?

为了notify-osd在 Linux (Ubuntu) 上拦截 ( ) 通知,我使用了dbus-monitor下面的脚本。随后,脚本运行另一个脚本 ( /opt/nonotifs/nonotifs/silent),并将截获的通知作为参数,以进行进一步处理:

#!/bin/bash

dbus-monitor "interface='org.freedesktop.Notifications'" | \
grep --line-buffered "string" | \
grep --line-buffered -e method -e ":" -e '""' -e urgency -e notify -v | \
grep --line-buffered '.*(?=string)|(?<=string).*' -oPi | \
grep --line-buffered -v '^\s*$' | \
xargs -I '{}' /opt/nonotifs/nonotifs/silent {}
Run Code Online (Sandbox Code Playgroud)

这完美无缺,除了通知hplip

在此处输入图片说明

从终端运行时,上面的脚本显示:

xargs: unmatched double quote; by default quotes are special to xargs unless you use the -0 option
Run Code Online (Sandbox Code Playgroud)

-0 …

command-line scripts dbus xargs

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

find 与 -exec 和 xargs 有什么区别?

尝试学习 Bash 脚本我想对当前目录下满足特定条件的所有文件执行一些命令。使用

find -name *.flac
Run Code Online (Sandbox Code Playgroud)

具体来说,我想转换.flac.mp3. 我可以找到所有文件。但是,我没有看到使用-execforfind和 using选项执行命令的区别xargs。例如

find -name *.flac | xargs -i ffmpeg -i {} {}.mp3
Run Code Online (Sandbox Code Playgroud)

相比

find -name *.flac -exec ffmpeg -i {} {}.mp3 \;
Run Code Online (Sandbox Code Playgroud)

有人可以指出区别吗?什么是更好的实践?有什么优点/缺点?

另外:如果我想同时删除原始文件,我将如何在上面的代码中添加第二个命令?

command-line find xargs

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

从文件中读取 URL 并在 Firefox 选项卡中打开它

PreTabs.txt 是我桌面上的一个文件,它只包含该行

google.com
Run Code Online (Sandbox Code Playgroud)

我想将该文件的内容通过管道传输到 Firefox,以便它会在新选项卡中打开 URL。

如果你执行cat PreTabs.txt | firefox,那
不应该和firefox [Contents of PreTabs.txt]?

command-line firefox xargs

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

“-bash:/usr/bin/rename:参数列表太长”

我想通过添加子目录的名称来重命名每个子目录中的文件。按照通过添加父文件夹名称重命名文件的答案,我尝试了:

rename  's/(.*)\//$1\/$1_/' */*
Run Code Online (Sandbox Code Playgroud)

但是,对于许多子目录,它不起作用。我有 13,000 个子目录,每个子目录包含大约 300 个文件。我得到

-bash: /usr/bin/rename:  Argument list too long
Run Code Online (Sandbox Code Playgroud)

我试过:

ls | xargs rename 's/(.*)\//$1\/$1_/' */*
find . -maxdepth 1 -type f -print0 | xargs rename 's/(.*)\//$1\/$1_/' */*
Run Code Online (Sandbox Code Playgroud)

两者都给出相同的错误:

-bash: /usr/bin/xargs:  Argument list too long
Run Code Online (Sandbox Code Playgroud)

编辑

xargs -L  rename 's/(.*)\//$1\/$1_/' */*
xargs -L1  rename 's/(.*)\//$1\/$1_/' */*
Run Code Online (Sandbox Code Playgroud)

同样的错误:

-bash: /usr/bin/xargs:  Argument list too long
Run Code Online (Sandbox Code Playgroud)

command-line xargs

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

标签 统计

xargs ×10

command-line ×8

find ×3

grep ×2

bash ×1

dbus ×1

firefox ×1

rm ×1

scripts ×1

text-processing ×1