如何为每个给定的输入行使xargs执行一次命令?它的默认行为是将行块化并执行一次命令,将多行传递给每个实例.
来自http://en.wikipedia.org/wiki/Xargs:
find/path -type f -print0 | xargs -0 rm
在此示例中,查找使用长文件名列表输入xargs.然后xargs将此列表拆分为子列表,并为每个子列表调用rm一次.这比这个功能相同的版本更有效:
find/path -type f -exec rm'{}'\;
我知道find有"exec"标志.我只是引用另一个资源的说明性示例.
我看到这个问题越来越流行了.我在下面回答了我自己的问题.什么说Inian是正确的,它帮助我更好地分析我的源代码.
我的问题出在了FIND而不是在RM.我的答案提供了一个代码块,我目前正在使用它来避免问题,当FIND找不到任何东西但仍会将参数传递给RM时,导致上面提到的错误.
以下老问题
我正在编写许多不同版本的相同命令.全部,执行但有错误/信息:
rm: missing operand
Try 'rm --help' for more information.
Run Code Online (Sandbox Code Playgroud)
这些是我正在使用的命令:
#!/bin/bash
BDIR=/home/user/backup
find ${BDIR} -type d -mtime +180 -print -exec rm -rf {} \;
find ${BDIR} -type d -mtime +180 -print -exec rm -rf {} +
find "$BDIR" -type d -mtime +180 -print -exec rm -rf {} \;
find "$BDIR" -depth -type d -mtime +180 -print -exec rm -rf {} \;
find ${BDIR} -depth -type d -mtime +180 -print -exec …Run Code Online (Sandbox Code Playgroud) 我的网站代码使用这段代码在服务器(Ubuntu)上自动部署.
cmd = 'cd ' + checkout_dir + ' && ' + svn_command + " st | awk '{print $2}' | grep -v ^deploy | tac | xargs -r" + svn_command + " revert -R && " + svn_command + ' up -r ' + options.revision
这个命令做的是cd进入checkout目录,运行svn status,然后提取filename($2),deploy从列表中删除目录及其所有文件(我不想还原它).如果没有参数,它不会运行svn revert命令,否则它会运行.
不幸的是,xargs -r它在我的机器上不起作用(Mac OS X 10.8).所以我被困在这里,任何人都可以帮忙吗?
在生成文件中,我正在尝试
我创建了这个简化的 makefile 来演示我的问题。无论是make a或make b执行的身体,如果,我不明白为什么不能。
.PHONY: a b
a:
$(eval MY_VAR = $(shell echo whatever))
@echo MY_VAR is $(MY_VAR)
$(info $(MY_VAR))
ifneq ($(strip $(MY_VAR)),)
@echo "should be executed"
endif
@echo done
b:
$(eval MY_VAR = $(shell echo ''))
@echo MY_VAR is $(MY_VAR)
$(info $(MY_VAR))
ifneq ($(strip $(MY_VAR)),)
@echo "should not be executed"
endif
@echo done
Run Code Online (Sandbox Code Playgroud)
我正在使用
$ make --version
GNU Make 3.81
Run Code Online (Sandbox Code Playgroud)
编辑:正如所指出的,vars 不需要 make vars
我对bash不太好,但我正在尝试创建一个脚本来杀死一些java进程:
/usr/ucb/ps -auxww \
| grep 'XUnit' \
| grep -v 'grep' \
| cut -c -2000 \
| awk '{print $2;}' \
| xargs kill
Run Code Online (Sandbox Code Playgroud)
cut这里使用的是因为awk行过长而失败(请参阅awkLINE_MAX的POSIX规范中的限制参考).
当没有这样的进程时会出现问题 - xargs尝试kill不带参数运行,从而导致错误.
我的xargs不接受-r或者--no-run-if-emptyargs,正如在没有指定POSIX合规性的相关问题的答案中所建议的那样.
我正在从我的 AWS 中提取各种 docker 图像,但它一直卡在最终图像上并出现以下错误
ERROR: for <container-name> failed to register layer: Error processing tar file(exit status 1): symlink libasprintf.so.0.0.0 /usr/lib64/libasprintf.so: no space left on device
ERROR: failed to register layer: Error processing tar file(exit status 1): symlink libasprintf.so.0.0.0 /usr/lib64/libasprintf.so: no space left on device
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这个问题?
我试过停止 docker,删除 var/lib/docker 并重新启动它,但它卡在了同一个地方
的结果
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p1 8.0G 6.5G 1.6G 81% /
devtmpfs 3.7G 0 3.7G 0% /dev
tmpfs 3.7G 0 3.7G 0% /dev/shm
tmpfs 3.7G …Run Code Online (Sandbox Code Playgroud) 我有以下命令检查是否添加了任何新文件并自动调用svn add所有这些文件
svn status | grep -v "^.[ \t]*\..*" | grep "^?" | awk '{print $2}' | xargs svn add
Run Code Online (Sandbox Code Playgroud)
但是当没有文件时,svn add会产生警告.
如何停止xargs调用上一个命令不会导致任何值?该解决方案需要与GNU和BSD(Mac OS X)版本一起使用xargs.