标签: xargs

带有多个命令的xargs

在当前目录中,我想打印文件名和内容.我可以单独打印文件名或内容

find . | grep "file_for_print" | xargs echo
find . | grep "file_for_print" | xargs cat
Run Code Online (Sandbox Code Playgroud)

但我想要的是将它们打印在一起,如下所示:

file1
line1 inside file1
line2 inside file1
file2
line1 inside file2
line2 inside file2
Run Code Online (Sandbox Code Playgroud)

我读了多个命令的xargs作为参数 并尝试过

find . | grep "file_for_print" | xargs -I % sh -c 'echo; cat;'
Run Code Online (Sandbox Code Playgroud)

但不起作用.我不熟悉xargs,所以不知道究竟是什么"-I%sh -c"的意思.谁能帮助我?谢谢!

bash xargs

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

管道seq到printf进行数字格式化

我正在尝试使用printf和seq打印以下模式:

0000
0001
0002
0003
Run Code Online (Sandbox Code Playgroud)

我的问题是我曾经使用过:

seq 0 10 | xargs printf %04d
Run Code Online (Sandbox Code Playgroud)

我的所有输出格式化为相同的行likeo:

0000000100020003
Run Code Online (Sandbox Code Playgroud)

我仍然无法使用xargs.在这种情况下如何正确使用它?

bash printf xargs seq

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

如何使用bash在参数数组上并行执行多个命令,如果其中至少有一个失败,则会失败

我有一个bash脚本,其函数需要与不同的参数并行运行.我需要知道是否至少有一个执行失败(返回非零) - 无论多少失败都无关紧要.

该命令接受执行的参数数组.由于高负载,我需要将并发限制为4次并发运行.我还需要在父进程(运行bash脚本的进程)中打印日志

这是我正在运行的功能:

function run_and_retry {
  EXIT_STATUS=0
  $COMMAND || EXIT_STATUS=$?

  if [ $EXIT_STATUS -ne 0 ]; then
    EXIT_STATUS=0
    $COMMAND || EXIT_STATUS=$?

  fi

  return $EXIT_STATUS
}
Run Code Online (Sandbox Code Playgroud)

我尝试过使用GNU parallel和xargs,并遇到了两个问题.

使用xargs :(无法从中获取退出状态,当我在TravisCI中运行它时也无效)

PARAMETERS=(first-parameter second-parameter third-parameter)
export -f run_and_retry
echo "${PARAMETERS[@]}" | xargs -P 4 -n 1 -I {} bash -c "run_and_retry {}"
Run Code Online (Sandbox Code Playgroud)

使用GNU并行:

PARAMETERS=(first-parameter second-parameter third-parameter)
export -f run_and_retry
parallel -j 4 -k --lb 2 run_and_retry {} ::: echo "${PARAMETERS[@]}" 
Run Code Online (Sandbox Code Playgroud)

parallel-processing bash xargs gnu-parallel

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

在xargs中使用用户定义的bash函数

我在.bashrc中有这个自定义函数:

function ord() {
  printf '%d' "'$1"
}
Run Code Online (Sandbox Code Playgroud)

如何让这个函数与xargs一起使用?:

cat anyFile.txt | awk '{split($0,a,""); for (i=1; i<=100; i++) print a[i]}' | xargs -i ord {}
xargs: ord: No such file or directory
Run Code Online (Sandbox Code Playgroud)

bash xargs

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

使用find和xargs以交互方式删除文件

我正在尝试将一些文件从find命令传递到交互式删除命令,这样我就可以仔细检查我要删除的文件,但是我遇到了一些麻烦.

find -name '#*#' -print0 | xargs -0 rm -i
Run Code Online (Sandbox Code Playgroud)

我以为上面会有用,但我只是得到一串 "rm: remove regular file ./some/path/#someFile.js#? rm: remove regular file ./another/path/#anotherFile#?..."

有人可以向我解释究竟发生了什么,以及我能做些什么才能得到我想要的结果?谢谢.

shell rm xargs

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

如何在使用xargs(并行)时获取退出代码

我做了一个启动并行rsync进程的脚本:

#! /bin/bash
LIST=$1
DEST_DIR=$2
RSYNC_OPTS=$3
#echo "rsyncing From=$SRC_DIR To=$DEST_DIR RSYNC_OPTS=$RSYNC_OPTS"
echo $LIST|xargs -n1 -d, echo|xargs -n1 -P 0 -I% rsync --rsync-path='sudo rsync' ${RSYNC_OPTS} % ${DEST_DIR}
Run Code Online (Sandbox Code Playgroud)

然后,我有问题获得rsync进程的退出状态.我知道有可能获得一个pipestatus数组,但我需要捕获退出代码以了解rsync是否成功.

有谁知道?

linux bash rsync xargs

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

xargs能分开参数吗?

echo "'param 1' 'param 2'" | xargs -n2 -I@ echo [@] [@]
Run Code Online (Sandbox Code Playgroud)

该命令输出:

[param 1 param 2] [param 1 param 2]

但是,我想输出:

[param 1] [param 2]

有没有办法做到这一点xargs?我计划使用它,-L1因此解决方案将处理多行和多个参数.

linux shell xargs

9
推荐指数
1
解决办法
8090
查看次数

可以更改xargs的默认分隔符吗?

我想要以下行为,而不必使用选项明确指定它:

xargs -d '\n'
Run Code Online (Sandbox Code Playgroud)

与大多数命令不同,您不能只使用别名,因为管道无法识别别名(作为旁注,为什么这样设计?).我也尝试创建自己的~/bin/xargs脚本,但我认为这不像在脚本中读取"$ @"作为字符串那么简单.

有关默认情况下如何使分隔符成为换行符的任何建议?当我在路径中有空格(并使用find ... -print0 | xargs -0其他不需要的效果)时,我不想得到一堆错误.

UPDATE

我的shell脚本尝试是这样的:

/usr/local/bin/xargs -d '\n' "$@"
Run Code Online (Sandbox Code Playgroud)

whitespace command-line xargs

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

使用regex查找多个文件扩展名的命令

我想知道在find命令中是否可行.我试图找到具有以下扩展名的所有特定文件,然后它将是SED.这是我当前的命令脚本:

find . -regex '.*\.(sh|ini|conf|vhost|xml|php)$' | xargs sed -i -e 's/%%MEFIRST%%/mefirst/g'
Run Code Online (Sandbox Code Playgroud)

不幸的是,我对正则表达式并不熟悉,但这就是我需要的东西.

regex sed file find xargs

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

并行化代码时 xargs 和 gnu parallel 有何不同?

这是一个基本问题。我很好奇 xargs 和 gnu parallel 在并行化代码时有何不同?

是否存在您会使用其中一种而不是另一种的用例?

我问这个问题是因为我已经看到了并行化问题的答案,其中使用任何一种工具都被社区认为是可以接受的。

unix xargs gnu-parallel

9
推荐指数
1
解决办法
3837
查看次数

标签 统计

xargs ×10

bash ×5

gnu-parallel ×2

linux ×2

shell ×2

command-line ×1

file ×1

find ×1

parallel-processing ×1

printf ×1

regex ×1

rm ×1

rsync ×1

sed ×1

seq ×1

unix ×1

whitespace ×1