題 Xargs字符串插值,而不是插入空格


我想重複一遍

touch ../template/filename

哪裡 filename 來自 find。我想要 xargs 申請 touch 操作,但我不想要它 插入一個空格 喜歡它通常會導致:

touch ../template/ filename

這是我不完整的命令。我該如何完成它?

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

4
2017-09-08 13:24


起源




答案:


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

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

注意 find *.html 這是錯誤的,因為通配符已經擴展 之前 命令執行。


9
2017-09-08 13:39



find命令給了我 ./photos_each.html 當我真正的意思 photos_each.html。我只想要文件名 - aitchnyu
@aitchnyu:他們在這里相當。都 ../template/photos_each.html 和 ../template/./photos_each.html 應該管用。 - grawity


這更容易編寫為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
2017-09-08 13:45





請考慮使用GNU Parallel。這樣,如果文件名包含空格'或',則可以避免令人討厭的意外:

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

請參閱介紹視頻以了解詳情: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1


0
2018-01-03 00:16