标签: xargs

如何在目录中超过 1000 万个文件上运行 sed?

我有一个目录,里面有 10144911 个文件。到目前为止,我已经尝试了以下方法:

  • for f in ls; do sed -i -e 's/blah/blee/g' $f; done

撞毁了我的外壳,ls它在一个 tilda 中,但我不知道如何制作一个。

  • ls | xargs -0 sed -i -e 's/blah/blee/g'

太多的参数 sed

  • find . -name "*.txt" -exec sed -i -e 's/blah/blee/g' {} \;

不能再分叉没有更多的记忆

关于如何创建这种命令的任何其他想法?这些文件不需要相互通信。ls | wc -l似乎工作(非常慢)所以它必须是可能的。

bash find xargs

17
推荐指数
2
解决办法
9263
查看次数

ls -rt(如何只列出最后一个文件?例如:| xargs gnome-open)

例如,包含 jpeg 文件的目录:如何轻松打开当前目录中最新的 jpeg?

linux command-line ls xargs

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

如何在 xargs-command 中使用通配符?

我有一个包含编号文件的目录,例如 1_foo.txt 2_bar.asc 13_test.png,并希望使用尽可能简单的 bash 命令将它们移动到单独的目录(例如 1、2 和 13)中。

创建编号目录很容易:

mkdir $(seq 1 15)
Run Code Online (Sandbox Code Playgroud)

我还想出了一个命令来将文件复制到各自的目录中:

seq 15 -1 1 | xargs -I@ mv @_* @
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用,因为 * 与 xargs 一起使用时被解释为普通字符,给我这样的错误:“mv: File '15_*' not found.”。

有什么简单的方法可以在 xargs 调用的命令中使用 * 作为通配符吗?

linux bash xargs wildcards

11
推荐指数
2
解决办法
8961
查看次数

Xargs 将输入传递给包含管道的命令

作为了解如何使用管道操作绑定优先级的一种工具,我试图为每个目录打印一个文件的路径:

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,我想学习如何操作其他问题的绑定优先级)。

xargs pipe

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

find: -exec vs xargs(又名为什么“find | xargs basename”会中断?)

我试图找到分布在子目录中的某种类型的所有文件,出于我的目的,我只需要文件名。我尝试通过 去除路径组件basename,但它不适用于xargs

$ find . -name '*.deb' -print | xargs basename 
basename: extra operand `./pool/main/a/aalib/libaa1_1.4p5-37+b1_i386.deb'
Try `basename --help' for more information.
Run Code Online (Sandbox Code Playgroud)

对于这些变体中的任何一个,我都得到了同样的东西(完全相同的错误):

$ find . -name '*.deb' -print0 | xargs -0 basename 
$ find . -name '*.deb' -print | xargs basename {}
Run Code Online (Sandbox Code Playgroud)

另一方面,这按预期工作:

$ find . -name '*.deb' -exec basename {} \;
foo
bar
baz
Run Code Online (Sandbox Code Playgroud)

这发生在最新的 Cygwin 和 Debian 5.0.3 上。我的诊断是 xargs 出于某种原因将两个输入行传递给 basename,但为什么呢?这里发生了什么?

gnu command-line find xargs

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

xargs --replace/-I 用于单个参数

我正在尝试使用 xargs 为每个提供的参数运行一个命令,但不幸的是 --replace/-I 标志在与 -n 结合时似乎无法正常工作。无论 -n 选项如何,{} 似乎都将扩展为从 stdin 读取的完整参数列表。

不幸的是,网络上的所有示例似乎都是用于命令 (mv, cp, rm) 的,这些命令将采用多个参数,其中 {} 展开。

例如,在运行时:

echo a b c d | xargs -n 1 -I {} echo derp {}
Run Code Online (Sandbox Code Playgroud)

输出是:

derp a b c d
Run Code Online (Sandbox Code Playgroud)

但我预计:

derp a
derp b
derp c
derp d
Run Code Online (Sandbox Code Playgroud)

但是,在没有 -I {} 的情况下运行它会产生预期的结果:

echo a b c d | xargs -n 1 echo derp
derp a
derp b
derp c
derp d
Run Code Online (Sandbox Code Playgroud)

有没有办法用 xargs 实现这一点?我的最终目的是用它来运行多个(并行)ssh 会话,比如

echo server{1..90} | xargs …
Run Code Online (Sandbox Code Playgroud)

linux ssh bash command-line xargs

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

Xargs 和 Wget 在一个小时后停止工作

在具有双核和 4GB RAM 的 Windows XP 上使用 Cygwin 运行脚本

cat url_list.txt | xargs -P50 wget -i
Run Code Online (Sandbox Code Playgroud)

我试图通过4GBURL来下载(大约 4300 万)

大约第一个小时工作正常,然后 Bash shell 和下载停止,即使它只有 2% 通过 URL 列表。

有什么想法可能是错的?

调试为什么一小时后停止的最佳方法是什么?

url wget cat xargs

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

在 xargs 中扩展 globs

我有一个这样的目录

mkdir test
cd test
touch file{0,1}.txt otherfile{0,1}.txt stuff{0,1}.txt
Run Code Online (Sandbox Code Playgroud)

我想在目录中的某些类型的文件上运行一些命令,例如 ls ,并将 * (glob) 扩展到文件名的所有可能性。

echo 'file otherfile' | tr ' ' '\n' | xargs -I % ls %*.txt
Run Code Online (Sandbox Code Playgroud)

此命令不会扩展 glob 并尝试查找文字“file*.txt”

我如何编写一个类似的命令来扩展 globs?(我想使用 xargs 以便该命令可以并行运行)

linux unix bash xargs macos

8
推荐指数
2
解决办法
4907
查看次数

如何在源文件中搜索某些文本?

目前我正在使用两个命令,我相信一定有更好的方法......

wim@wim-acer:~/ffmpeg$ find . -name "*.h" -print0 | xargs -0 grep -i invalid\ preset
wim@wim-acer:~/ffmpeg$ find . -name "*.c" -print0 | xargs -0 grep -i invalid\ preset
Run Code Online (Sandbox Code Playgroud)

bash grep xargs pipe

8
推荐指数
2
解决办法
5914
查看次数

在 emacs 上运行 rgrep 时,grep 以代码 123 异常退出

问候 Emacsers

我在“Ubuntu 10.04.1 LTS”上运行 GNU Emacs 23.1.1 并且我在标准 Linux 内核源代码(vanilla)上使用内置 Mx rgrep 执行的任何搜索过早结束,以下错误打印到 emacs echo区域:

Grep exited abnormally with code 123
Run Code Online (Sandbox Code Playgroud)

我已经在 Redhat 系统上看到它一段时间了,还有其他(大型)代码库,有没有人看到或者更好地解决这个问题?

谢谢!

编辑:出于我以外的原因,stackexchange 不允许我在下面编辑我的评论,所以我会在这里更新。

按照下面的评论,我尝试运行 rgrep 在 emacs shell 缓冲区中运行的相同命令

 find . \( -path \*/SCCS -o -path \*/RCS -o -path \*/CVS -o -path \*/MCVS -o -path \*/.svn -o -path \*/.git
-o -path \*/.hg -o -path \*/.bzr -o -path \*/_MTN -o -path \*/_darcs -o -path \*/\{arch\} \) -prune -o  -type f \( -name \*.\[ch\] \) -p
rint0 …
Run Code Online (Sandbox Code Playgroud)

linux grep emacs xargs

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

标签 统计

xargs ×10

bash ×5

linux ×5

command-line ×3

find ×2

grep ×2

pipe ×2

cat ×1

emacs ×1

gnu ×1

ls ×1

macos ×1

ssh ×1

unix ×1

url ×1

wget ×1

wildcards ×1