问候 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) 我正在尝试一个接一个地对文件列表执行一系列命令。我想知道是否可以在以下行中使用 xargs
ls *.txt | xargs -n 1 -I {} cat {} | grep foo > {}.foo
Run Code Online (Sandbox Code Playgroud)
在哪里
cat {} | grep foo > {}.foo
Run Code Online (Sandbox Code Playgroud)
是我想对每个文件执行的命令。
我有这个命令:
find $1 | xargs touch
Run Code Online (Sandbox Code Playgroud)
但是'名称中包含字符的文件失败并显示“xargs:不匹配的单引号”,我猜其他特殊字符会导致同样的问题。
如何转义输出以便此命令适用于所有文件名?
我试图杀死任何与 mysql 相关的进程。我正在拼凑一个命令,到目前为止,还没有想出正确的解决方案。另一个考虑是,最后一个进程将对应于命令“grep mysql”——下面命令的一部分。到我尝试杀死它时,此进程将不再存在,因此需要将其从通过管道传输到 kill -9 的输入中排除。完成此任务的最佳方法是什么?到目前为止,我有不完整的命令:
ps -A | grep mysql | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)
它具有(假的,就本示例而言)输出
11111
22222
33333 # process id to be excluded
Run Code Online (Sandbox Code Playgroud)
我假设我可以像这样将它传递给 xargs kill -9 :
ps -A | grep mysql | awk '{print $1}' | xargs kill -9
Run Code Online (Sandbox Code Playgroud)
并找出排除最后一个 pid 的方法,但我尝试的所有方法似乎都无法正常工作。
我想重复
touch ../template/filename
Run Code Online (Sandbox Code Playgroud)
filename来自哪里find。我想xargs应用该touch操作,但我不希望它像通常那样插入一个空格,它派生为:
touch ../template/ filename
Run Code Online (Sandbox Code Playgroud)
这是我不完整的命令。我如何完成它?
find *.html | xargs touch ../template/WHAT-NOW
Run Code Online (Sandbox Code Playgroud) 我想杀死进程名称中包含 foo 的 root 拥有的进程
sudo sh -c "ps aux | grep [f]oo | awk '{print $2}' | xargs kill -15"
Run Code Online (Sandbox Code Playgroud)
此命令失败,因为 awk 和 xargs 被忽略。
sudo sh -c "ps aux | grep [f]oo | awk '{print $2}' | xargs kill -15"
Run Code Online (Sandbox Code Playgroud)
所以 kill 收到错误的参数
kill pid ... Send SIGTERM to every process listed.
kill signal pid ... Send a signal to every process listed.
kill -s signal pid ... Send a signal to every process listed.
kill -l List …Run Code Online (Sandbox Code Playgroud) 考虑以下xargs用法:
echo Alice Bob Carol | xargs -n1 echo
Run Code Online (Sandbox Code Playgroud)
它产生三个这样的 echo 语句
echo Alice
echo Bob
echo Carol
Run Code Online (Sandbox Code Playgroud)
考虑这个修改后的xargs用法:
echo Alice Bob Carol | xargs -n1 -I% echo Hello, %. How are you?
Run Code Online (Sandbox Code Playgroud)
它生成一个 echo 语句而不是所需的三个:
echo Hello, Alice Bob Carol. How are you?
Run Code Online (Sandbox Code Playgroud)
这是因为-I根据手册页更改了输入流的分隔方式:
未加引号的空格不会终止输入项;相反,分隔符是换行符
使用替换技术时是否可以保留空格分隔符?
我想出的最好的方法是用来-d指定空格分隔符,有没有更好的方法?
echo -n Alice Bob Carol | xargs -n1 -I% -d\ echo Hello, %. How are you?
Run Code Online (Sandbox Code Playgroud) 我有一个很大的 RAR 档案文件夹。文件夹级别有明显的层次结构。我想一次解压缩整个档案集。
我有以下单线,可以工作:
find -name "*.rar" -print0 | xargs -0 -n 1 -P 4 unrar x
Run Code Online (Sandbox Code Playgroud)
(请注意,我们并行运行四个线程以加快操作速度。:-))
此命令的问题在于 xargs 是在每个 RAR 文件的顶级目录中执行的。这意味着所有输出都被转储到顶级文件夹中。
相反,我希望输出与 RAR 存档存在于同一文件夹中。
例子:
Top level
|--FolderA
|----File1.rar
|----File2.rar
|--FolderB
|----File1.rar
|----File2.rar
|----File3.rar
|--FolderC
|----File1.rar
|----File2.rar
Run Code Online (Sandbox Code Playgroud)
每个“File1.rar”文件都包含一个同名文件。因此,将它们全部提取到顶级文件夹会导致覆盖问题。
总而言之,我想提取上述层次结构中的所有 RAR 文件。我希望每个 RAR 文件的内容都存在于 RAR 文件所在的文件夹中。
在我看来,解决方案是以某种方式设置工作目录,然后在那里运行 unrar 命令表单。但是,由于 find 命令给了我文件名,而不是目录,我不能做类似的事情
| xargs -I{} -n 1 -P 4 cd {} \; unrar x {}
Run Code Online (Sandbox Code Playgroud)
没有编写一个 Perl 或 Python 脚本来环绕 unrar 命令并处理将提供的路径分成其部分并执行命令,有没有更好的方法来实现这一点?
我正在使用以下代码连接当前目录中的所有 pdf 文件:
find . -iname '*.pdf'|sort|xargs|xargs -I {} pdftk {} cat output union.pdf
Run Code Online (Sandbox Code Playgroud)
第一次调用 xargs 的作用是将 sort 的输出转换为一行,项目之间用空格分隔。但结果是这样的:
Error: Unable to find file.
Error: Failed to open PDF file:
./001.pdf ./002.pdf ./003.pdf ./004.pdf ./007.pdf ./010.pdf ./031.pdf ./057.pdf ./077.pdf ./103.pdf ./131.pdf ./155.pdf ./179.pdf ./205.pdf ./233.pdf ./261.pdf ./285.pdf ./313.pdf ./331.pdf ./357.pdf ./383.pdf ./411.pdf
Errors encountered. No output created.
Done. Input errors, so no output created.
Run Code Online (Sandbox Code Playgroud)
xargs 是否将参数传递给带有周围引号的 pdftk?如何防止这种情况?(空格、转义以及它们与命令交互的方式总是让我发疯......)