我想将一个变量中的目录复制到另一个变量中的目录,但没有循环。
from="fromdir1 fromdir2"
to="todir1 todir2"
我的意思fromdir1
是todir1
,fromdir2
到todir2
。
我认为它可以完成,xargs
但我不知道如何完成。
我想将一个变量中的目录复制到另一个变量中的目录,但没有循环。
from="fromdir1 fromdir2"
to="todir1 todir2"
我的意思fromdir1
是todir1
,fromdir2
到todir2
。
我认为它可以完成,xargs
但我不知道如何完成。
我正在运行openssl dhparam -out dhparam4096.pem 4096
,它在任务期间将单个内核固定在 100%(这在某些处理器上可能相当可观)。我有 1 个或多个基本上处于空闲状态的额外核心,我想使用它们。
我想运行$(nproc)
该命令的 × 个实例。不同之处在于,我不需要完成所有实例——只需要第一个退出的实例……一旦“获胜者”实例完成,0
其余进程就应该被“d”或类似,它不需要优雅。SIGTERM
我正在学习parallel
并xargs
为实现这一目标,有许多用于完成所有并行任务的操作方法文章,但我在搜索引擎 fu 上没有达到上述目标。我不喜欢使用parallel
or的想法,一旦我找到了使用它的方法,我的阅读列表中xargs
就有了并行替代页面。
我如何运行$(nproc)
× 个命令实例,其中第一个退出的实例0
将杀死其他实例?
其他信息:Debian 11、aarch64 bash
、.
我明白,-i
但我不知道它与手册有何不同-I
,也不知道为什么手册说它-i
已被弃用。例如,使用下面两行有什么区别:
ls -t | tail -n 4 | xargs -I{} mv {} test2/
ls -t | tail -n 4 | xargs -i mv {} test2/
对于第一行,是否可以将任何内容替换为第一{}
行-I
,或者仅仅是语法?
谢谢
根据我的经验,我看到的“xargs”行为似乎非常出乎意料。我使用“ls”查找匹配的文件夹名称并使用“xargs”将其发送到“cd”。我收到该文件夹不存在的消息。但是,如果我不使用“xargs”,则“cd”可以工作。此外,如果我确实使用“xargs”但将其发送到“ls”而不是“cd”,它也可以工作。
# Identify desired directory
ls -d *[Aa]nt*
201909+ants/
# Print the desired command with "echo"
ls -d *[Aa]nt* | xargs echo cd
cd 201909+ants/
# Execute the desired command and get error
ls -d *[Aa]nt* | xargs cd
xargs: cd: No such file or directory
# Confirm that the desired command without "xargs"
cd 201909+ants # This works no problem
cd .. # Go back up
cd 201909+ants/ # This works no problem
cd .. # Go back up
# Confirm that "xargs" with "ls"
ls -d *[Aa]nt* | xargs ls -d
201909+ants/
我确信这是键盘和椅子之间的 ID1OT 问题。谁能指出我的错误在哪里?
我正在使用 Cygwin 的 Bash,但我很少看到与 Linux 的差异。我不记得我上一次看到这样的差距是什么时候了。
我正在尝试使用 fzf 来选择和激活不同的虚拟环境。但是,我收到以下错误:
xargs: source: No such file or directory
我的命令包括三个部分:find | fzf | xargs
(1) find 定位我的虚拟环境,
(2) 使用 fzf 选择虚拟环境,
(3) xargs 用于source
选择的文件。
下面是完整的命令:
find ~/.virtualenvs/ -maxdepth 1 -type d | fzf | xargs -I {} source {}/bin/activate
xargs: source: No such file or directory
我可以直接获取文件(即命令提示符显示进入 fzf_delete 虚拟环境):
brian:~$ source /home/brian/.virtualenvs/fzf_delete/bin/activate
(fzf_delete) brian:~$
我可以使用 fzf 选择虚拟环境:
find ~/.virtualenvs/ -maxdepth 1 -type d | fzf
/home/brian/.virtualenvs/fzf_delete
我还通过删除对 find 和 fzf 的依赖来将问题隔离到 xargs:
echo "/home/brian/.virtualenvs/fzf_delete" | xargs -I {} source {}/bin/activate
xargs: source: No such file or directory
我已经尝试了所有我能想到的引用、变量的使用、字符串连接、命令替换、使用 bash -c 等变体,但都无济于事。
如何让 xargs 获取所选文件的来源?
PS - 我知道如果文件名包含空格,则应将空终止与 find、fzf 和 xargs 一起使用,但这似乎不会导致直接问题。
我有一个 CentOS 8.0 系统,安装了很多我不想要的模块。我想摆脱它们以强制升级到 CentOS 9.0,我知道它不受官方支持,但实际上并不是这个问题的真正含义。这个问题只是关于删除我系统上安装在 dnf 中的所有模块的这一步骤。
输出dnf module list
非常大,所以我把它放在这里:https ://dpaste.com/EXMJLQ3VK
不再需要安装在该系统上的很多东西,正如您所见,这会消除很多臃肿。
我想从模块列表中的 dnf 获得可解析的输出,我也不完全确定我应该做什么来删除它们。在 Fedora wiki 上有一个关于使用 dnf 模块的页面,但我似乎无法从列表中删除一个。我已经尝试过这样的事情来删除模块......
# dnf module remove php:remi-7.4/common
Unable to match profile in argument php:remi-7.4/common
我当然不想手动删除这些模块中的每一个,但我找不到任何方法从 dnf 获取可解析列表,甚至无法手动删除它们。如果我学会了如何做这两件事xargs
,那么只需删除列表中的每一件事。
我确实设法通过像这样将通配符传递给 dnf 来禁用每个模块......
dnf module disable "*"
但是我不能用同样的方法删除它们......
# dnf module remove "*"
Last metadata expiration check: 2:20:13 ago on Wed 01 Jun 2022 10:32:56 AM UTC.
Error: Cannot enable more streams from module 'pmdk' at the same time
您好,我有一个名为 users 的文件。例如,在该文件中,我有一个用户列表
user1
user2
user3
现在我有另一个名为 search 的文件,其中有一个名为 owner = user 的特定字符串,例如
owner = user1
random text
random text
owner = user15
random text
random text
owner = user2
那么是否可以根据用户文件找到所有用户并将这些用户重命名为 [email protected] ?例如
owner = [email protected]
random text
random text
owner = user15
random text
random text
owner = [email protected]
我使用 ack 命令和 cat 命令得到了一些零碎的东西,但我是编程新手,所以我无法获得正确的输出。我想出的是下面,但它并没有真正做我需要的。非常感谢任何帮助。
cat users | xargs -i sed 's/{}/moo/' searches
如何更改此代码以免发出错误,换句话说,xargs
如果 stdout 为空,则不执行代码。
终端:
$ cat << EOF > dummy.sh
#! /usr/bin/env bash
[[ -f "\$1" ]] && echo "file=\$1" || { echo "error"; exit 1; }
shift
(( \$# == 0 )) || "\$0" "\$@"
EOF
$ chmod +x dummy.sh
$ mkdir trash.later && touch trash.later/foo
$ find trash.later -type f | xargs -n 1 ./dummy.sh
file=trash.later/foo
$ find trash.later -type f | grep 'bar' | xargs -n 1 ./dummy.sh
error
我的问题与编写可能与xargs
. 我发现将迭代步骤和循环结合起来很麻烦,因为第二个可以变成命令。我必须重新发明轮子,所以:这方面存在什么?
while_do_it.sh
:
#! /bin/bash
while (( $# > 0 ))
do
echo "($1)"
shift
done
可以分为
while.sh
#! /bin/bash
command="$1"
shift
while (( $# > 0 ))
do
"$command" "$1"
shift
done
do_it.sh
#! /bin/bash
echo "($1)"
应用:
$ cat << EOF | xargs ./while.sh ./do_it.sh
foo
bar
qux
EOF
(Ctrl+D)
(foo)
(bar)
(qux)
我有一个脚本,它需要文件作为参数,并为每个文件执行一组指令。我应该如何编写它才能将其通过管道传输到find
?在下面的示例中,我没有find
这样使用。我假设它的输出具有相同的结构printf "%s\n..."
(不是吗?)
my-script.sh
:
# !/bin/bash
help()
{
echo "help"
echo
}
while [[ $# -gt 0 ]]
do
case $1 in
*)
echo "$1"
shift # past argument
;;
esac
done
美好的:
$ cat foo; echo; cat bar
foo
bar
$ ./my-script.sh foo bar
foo
bar
但是之后:
$ printf "%s\n%s\n" "./foo" "./bar" | xargs -n 1 ./my-script.sh
./my-script.sh: 9: ./my-script.sh: [[: not found
./my-script.sh: 9: ./my-script.sh: [[: not found