gpt4 book ai didi

find - 更改 {} 的参数 find exec

转载 作者:行者123 更新时间:2023-12-05 04:17:19 28 4
gpt4 key购买 nike

是否可以更改传递给 find 中的 exec 的参数?例如,我需要以不同的名称复制文件:*.txt -> *.new.txt现在我正在为两个命令执行此操作:

find /root/test -name "*.txt" -exec cp {} {}.new \;
find /root/test -name "*.txt.new" -exec rename .txt.new .new.txt {} \;

是否可以解析 {} 来访问文件扩展名?像(我不完全知道):

-exec cp {} {$1}.new.txt \;

最佳答案

我不确定是否可以完全按照您的要求进行操作,但是使用 shell 对参数进行这种修改肯定是可能的:

find /root/test -name "*.txt" -exec sh -c 'cp "$0" "${0%.txt}.new.txt"' "{}" \;

我会尝试将其分解,以便更容易理解:

-exec sh -c '<...>' "{}" \;

这将启动一个新的 shell,它执行单引号中指定的脚本。另请注意,“{}” 是发送到此脚本的参数,在该脚本中将作为 $0 提供。

至于脚本本身,$0 是匹配的文本文件,我们将其复制到 ${0%.txt}.new.txt 以获取文件name ($0),并从文件名的 END 中删除匹配 .txt 的第一个文本,留下一个没有文件名的文件名一个扩展。然后我们简单地附加新文件名.new.txt

作为附录,根据您的系统情况,您可能会收到“替换错误”消息(我在我的 Mint 安装上有这个,但在我的 CentOS 安装上没有)。如果这样做,请尝试将 -exec sh 更改为 -exec bash

关于find - 更改 {} 的参数 find exec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23626842/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com