我想重复
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