Xargs 字符串插值,不是通过插入空格

Xargs 字符串插值,不是通过插入空格

我想重复

touch ../template/filename

哪里filename来的find。我想xargs应用touch操作,但我不想让它插入空格像往常一样,其结果为:

touch ../template/ filename

这是我的未完成的命令。我该如何完成它?

find *.html | xargs touch ../template/WHAT-NOW

答案1

find -name "*.html" | xargs -d"\n" -I"{}" touch ../template/{}

find -name "*.html" -exec touch ../template/{} \;

请注意这find *.html是错误的,因为通配符被扩展了命令执行。

答案2

这更容易写成 shell 循环。例如,在 C shell 中,你可以写:

foreach i (`find -name "*.html"`)
   touch ../template/$i
end

在 bash 中如下:

for i in `find -name "*.html"`
do
   touch ../template/$i
done

在我的 Hamilton C shell 中(完全披露:我是作者),我添加了一个“...”通配符进行树遍历,因此你可以写:

foreach i (.../*.html)
   touch ../template/$i
end

答案3

考虑使用 GNU Parallel。这样,如果文件名包含空格 ' 或 ",您就可以避免令人不快的意外:

find *.html | parallel -X touch ../template/{/}

观看介绍视频以了解更多信息:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

相关内容