Shell

xargs 和 < 和 > 到相同的文件

  • April 14, 2016

我想git stripspace在每個建構(或預送出或手動)上執行我的所有原始碼文件,以刪除無關的空格,稍後可能以標準方式格式化程式碼,

所以我想做類似的事情

git stripspace &lt; project/code.m &gt; project/code.m

所以我認為我應該能夠使用find -exec或者xargs但看起來find不喜歡’git stripspace’(可能是因為之間的空格或<或>)並且我不知道如何傳遞相同的文件名,相同的參數,連續兩次使用正確的重定向 (< >) 。

在讀取文件之前,您正在破壞文件。您需要使用臨時文件或類似 moreutils 的sponge實用程序

在這種情況下,您不能使用find -execor 。xargs您需要向 shell 傳遞一個包含命令和文件名的參數。xargsfind期望文件名標記(它們用文件名替換)是一個獨立的參數。您可以改用循環。

使用臨時文件:

find | while read file ; do
   git stripspace &lt; "$file" &gt; tempfile
   mv -f tempfile "$file"
done

sponge

find | while read file ; do
   git stripspace &lt; "$file" | sponge "$file"
done

引用自:https://unix.stackexchange.com/questions/84475