相关疑难解决方法(0)

使xargs为每行输入执行一次命令

如何为每个给定的输入行使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"标志.我只是引用另一个资源的说明性示例.

xargs

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

与'find'命令一起使用时出错'rm:缺少操作数'

我看到这个问题越来越流行了.我在下面回答了我自己的问题.什么说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)

bash rm operand

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

在Mac OS X中忽略xargs的空结果

我的网站代码使用这段代码在服务器(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).所以我被困在这里,任何人都可以帮忙吗?

svn macos shell awk xargs

14
推荐指数
1
解决办法
4375
查看次数

Makefile 测试变量是否为空

在生成文件中,我正在尝试

  • 运行 shell 命令并在 make 变量中捕获输出
  • 如果变量不为空,做一些事情

我创建了这个简化的 makefile 来演示我的问题。无论是make amake 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

makefile

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

防止POSIX xargs尝试运行空命令

我对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_MAXPOSIX规范中的限制参考).

当没有这样的进程时会出现问题 - xargs尝试kill不带参数运行,从而导致错误.

我的xargs不接受-r或者--no-run-if-emptyargs,正如在没有指定POSIX合规性的相关问题的答案中所建议的那样.

shell posix kill xargs

5
推荐指数
1
解决办法
365
查看次数

从 AWS 拉取 docker 镜像时设备上没有剩余空间

我正在从我的 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)

amazon-web-services docker docker-compose

3
推荐指数
2
解决办法
3024
查看次数

如果上一个命令没有返回任何内容,请不要调用xargs

我有以下命令检查是否添加了任何新文件并自动调用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.

shell xargs

2
推荐指数
1
解决办法
1840
查看次数

标签 统计

xargs ×4

shell ×3

amazon-web-services ×1

awk ×1

bash ×1

docker ×1

docker-compose ×1

kill ×1

macos ×1

makefile ×1

operand ×1

posix ×1

rm ×1

svn ×1