Articles of xargs

search文件并对每个结果运行脚本

我想知道如何search所有子目录中的某些模式的文件(月明智/date明智 – 创build子目录)。 然后,在find的文件上执行一个脚本。 第一步:例如:目前在这个模式TT_DETAIL*.gz上search文件。 find /cygdrive/c/Test/ -name TT_DETAIL*.gz 输出#1: /cygdrive/c/Test/Feb2014/TT_DETAIL_20141115.csv.gz /cygdrive/c/Test/Jan2014/TT_DETAIL_20141110.csv.gz /cygdrive/c//Test/Mar2014/TT_DETAIL_20141120.csv.gz 第2步: zcat TT_DETAIL*.gz | awk 'BEGIN { FS=OFS=","} { if ($11=="10") print $2,$3,$6,$10,$11,$17}' >Op_TT_Detail.txt 猫Op_TT_Detail.txt 01-NOV-2014 00:30:53,AAA,ECH,1,10,XXX 01-NOV-2014 00:39:36,BBB,ECH,1,10,XXX 01-NOV-2014 00:39:44,CCC,ECH,1,10,XXX 01-NOV-2014 00:25:20,DDD,ECH,1,10,XXX 试图把这样的命令组合起来,但是这些步骤是完整的: find /cygdrive/c/Test/ -name TT_DETAIL*.gz | xargs | zcat | awk 'BEGIN { FS=OFS=","} { if ($11=="10") print $2,$3,$6,$10,$11,$17}' […]

如何在单行输出包含引号的文件名?

我想以下列方式输出文件夹中的项目列表: "filename1" "filename2" "file name with spaces" "foldername" "folder name with spaces" 换句话说,项目名称必须在一行中,用引号(单或双)包围,并用空格分隔。 我知道 find . | xargs echo 在一行打印输出,但我不知道如何在每个项目名称周围添加引号。 这段代码是bsh脚本的一部分。 因此,解决scheme可以是一组命令并使用临时文件来存储中间输出。 非常感谢您的任何build议。 干杯,安娜

了解UNIX命令xargs

我对此很困惑。 需要一些澄清。 例1: pgrep string | xargs ps 例2: find . | xargs grep whatever 从例1我收集这样的: search正在运行的进程名称的一部分的“string”,并将所有匹配的进程ID返回到“xargs ps” – >,这只是将ps附加到匹配(即进程ID本身)以获得相同输出为: ps <processid> 有人能解释一下xargs在这种情况下究竟做了什么? 从例2我收集这样的: 它是从当前工作目录recursionsearch一些“string”。 在这里,“xargs”究竟是如何工作的? 我认为'xargs'不断地将数据从标准input附加到xargs(通常是UNIX自己的命令)的'参数'。 从xargs()手册页: xargs从标准input中读取项目,由空格(可以用双引号或单引号或反斜线保护)或换行符分隔,并且执行命令(默认是/ bin / echo)一次或多次,从标准input中读取项目。 标准input上的空行会被忽略。

Unix – “xargs” – 输出“在中间”(不在最后!)

在Unix中使用xargs应用程序的例子可以是这样的: ls | xargs echo 这是相同的(假设我有someFile和someDir/在工作目录中): echo someFile someDir 所以xargs接受它的input并把它放在下一个命令的末尾(这里是echo的结尾)。 但有时候我想让xargs把它的input放在下一个命令的中间 。 例如: find . -type f -name "*.cpp" -print | xargs g++ -o outputFile 所以如果我在当前目录下有文件a.cpp , b.cpp , c.cpp ,输出将与命令相同: g++ -o outputFile a.cpp b.cpp c.cpp 但我想要这样的东西: g++ a.cpp b.cpp c.cpp -o outputFile 有没有办法做到这一点? PS:在某些情况下我需要它,因为例如: i586-mingw32msvc-g++ -o outputFile `pkg-config –cflags –libs gtkmm-2.4` a.cpp b.cpp […]

哪个更快,find“执行”或“查找|” xargs -0'?

在我的Web应用程序中,我使用PHP脚本呈现页面,然后从中生成静态HTML文件。 静态HTML被提供给用户来加速性能。 HTML文件最终会变陈旧,需要删除。 我在两种写驱逐脚本的方法之间辩论。 首先是使用一个单一的查找命令,如 find /var/www/cache -type f -mmin +10 -exec rm \{} \; 第二种forms是通过xargspipe道,类似 find /var/www/cache -type f -mmin +10 -print0 | xargs -0 rm 第一种forms为每个find的文件调用rm ,而第二种forms只是将所有文件名发送给一个rm (但文件列表可能很长)。 哪种forms会更快? 就我而言,caching目录是在几个Web服务器之间共享的,所以这些都是通过NFS完成的,如果这对于这个问题很重要的话。

wget或从stdincurl

我想从标准input提供URL下载一个网页。 本质上,一个进程不断地产生URL到标准输出/文件,我想pipe他们wget或curl。 (如果你想,可以把它想象成简单的networking爬虫)。 这似乎工作正常: tail 1.log | wget -i – -O – -q 但是,当我使用'尾巴-f',它不再工作(缓冲或wget正在等待EOF?): tail -f 1.log | wget -i – -O – -q 任何人都可以使用wget,curl或任何其他标准的Unix工具提供解决scheme吗? 理想情况下,我不会不希望在循环中重新启动wget,只要保持运行状态,即可下载url。

在命令行和Xargs中批量重命名文件

所以,我有以下结构: . .. a.png b.png c.png 我跑了一个命令来调整它们的大小 ls | xargs -I xx convert xx -resize xx.jpg 现在我的目录看起来像这样 . .. a.png.jpg a.png b.png.jpg b.png c.png.jpg c.png 第一个问题是,我如何重命名文件,以便我可以只有一个扩展名。 不是两个。 (基本上,我怎么清理我原来的错误)? 第二个问题是,在将来使用xargs时,如何将文件的扩展名更改为第二个命令?

是否有一个grep相当于find的-print0和xargs的-0开关?

我经常想写这样的命令(在zsh ,如果相关的话): find <somebasedirectory> | \ grep stringinfilenamesIwant | \ grep -v stringinfilesnamesIdont | \ xargs dosomecommand (或更复杂的greps组合) 最近几年find了-print0开关,而xargs已经加了-0 ,允许通过空文件名来处理文件名中的空格, find <somebasedirectory> -print0 | xargs -0 dosomecommand 然而, grep (至less是我的版本,Ubuntu上的GNU grep 2.10)似乎没有相当于消耗和生成以空字符结尾的行; 它有–null ,但是这似乎只与在使用grep直接在文件中search时使用-l输出名称有关。 有一个等同的选项或我可以使用grep选项的组合? 另外,是否有一种简单而优雅的方式来expression我的pipe道命令简单地使用find的-regex ,或者Perl?

将文件和pipe道分组到awk命令

我有一个目录中的文件; 他们使用YYYY_MM_DD命名: -rw-r–r– 1 root root 497186 Apr 21 13:17 2012_03_25 -rw-r–r– 1 root root 490558 Apr 21 13:17 2012_03_26 -rw-r–r– 1 root root 488797 Apr 21 13:17 2012_03_27 -rw-r–r– 1 root root 316290 Apr 21 13:17 2012_03_28 -rw-r–r– 1 root root 490081 Apr 21 13:17 2012_03_29 -rw-r–r– 1 root root 486621 Apr 21 13:17 […]

Bash:如何尾巴然后复制多个文件(例如使用xargs)?

我一直在尝试xargs和pipe道的各种组合,但我不能得到正确的结果。 以前的问题并不完全涵盖我想要做的事情: 我有一个源代码目录,可以说/富/源,混合不同的文件 我只想将在源文件中find的csv文件复制到不同的目的地,例如/ foo / dest 但是我同时也需要删除232个标题行(例如使用尾部) 我发现我需要将查找的结果input到xargs中,然后可以在每个查找结果上运行命令。 但是我正在努力去追求复制。 如果我pipe尾巴到CP,CP似乎并没有收到文件(缺less文件操作数)。 以下是我迄今为止所尝试的一些示例: find /foo/source -name "*.csv" | xargs -I '{}' sh -c 'tail -n +232 | cp -t /foo/dest' cp:缺less文件操作数 find /foo/source -name "*.csv" | xargs -I '{}' sh -c 'tail -n +232 {} | cp -t /foo/dest' 结果: cp:无法访问“/ foo / dest”:没有这样的文件或目录… find /foo/source […]