Shell
xargs 和 < 和 > 到相同的文件
我想
git stripspace
在每個建構(或預送出或手動)上執行我的所有原始碼文件,以刪除無關的空格,稍後可能以標準方式格式化程式碼,所以我想做類似的事情
git stripspace < project/code.m > project/code.m
所以我認為我應該能夠使用
find -exec
或者xargs
但看起來find
不喜歡’git stripspace’(可能是因為之間的空格或<或>)並且我不知道如何傳遞相同的文件名,相同的參數,連續兩次使用正確的重定向 (< >) 。
在讀取文件之前,您正在破壞文件。您需要使用臨時文件或類似 moreutils 的
sponge
實用程序。在這種情況下,您不能使用
find -exec
or 。xargs
您需要向 shell 傳遞一個包含命令和文件名的參數。xargs
並find
期望文件名標記(它們用文件名替換)是一個獨立的參數。您可以改用循環。使用臨時文件:
find | while read file ; do git stripspace < "$file" > tempfile mv -f tempfile "$file" done
與
sponge
:find | while read file ; do git stripspace < "$file" | sponge "$file" done