我使用以下命令有時在使用hg時刪除更改的文件。在命令之間轉義管道輸出
hg status -n | xargs rm
我所遇到的,其中如果
hg status -n
輸出包含不會被發現與文件中的空格的文件路徑的問題。通常我會引用或轉義文件名稱中的空格,但我不知道如何使用管道輸出執行此操作。任何幫助將非常感謝:)
我使用以下命令有時在使用hg時刪除更改的文件。在命令之間轉義管道輸出
hg status -n | xargs rm
我所遇到的,其中如果
hg status -n
輸出包含不會被發現與文件中的空格的文件路徑的問題。通常我會引用或轉義文件名稱中的空格,但我不知道如何使用管道輸出執行此操作。任何幫助將非常感謝:)
告訴這兩個命令來使用NUL作爲分隔符:
hg status -n0 | xargs -0 rm
另外要注意:在-n
選項將打印甚至Mercurial不知道的文件。
也許你想要這個呢?
hg status -mn0 | xargs -0 rm
另外,不要忘了hg revert
或hg purge
。也許他們做你想做的事情,例如
hg revert --all --no-backup
或
.hgrc
[extensions]
hgext.purge=
殼
hg purge
+1 NUL是不需要驚喜的人的文件分隔符。 – l0b0 2012-04-03 15:10:51
使用NUL作爲分隔符的+1非常感謝!有時候我發現在那裏拋出一個'grep'並刪除一部分文件是很有用的 - 比如當我不小心創建了一個***。orig **的負載時 - 例如 - 這就是爲什麼'revert'或'purge'不能(看'hg help revert'我看到我可以用'-I'。現在我有兩種方法來做一些事情,我學到了一些新的東西!) – Dori 2012-04-06 08:38:21
請參閱'grep -z'瞭解如何過濾null-分界輸出。 – Mikel 2012-04-12 03:27:09
我沒有安裝hg
。因此,我將與ls
做到這一點:
$ touch 'file A' 'file B'
$ ls -1
file A
file B
$ ls | xargs rm
rm: cannot remove `file': No such file or directory
rm: cannot remove `A': No such file or directory
rm: cannot remove `file': No such file or directory
rm: cannot remove `B': No such file or directory
$ ls | tr '\n' '\0' | xargs -0 rm
$ ls
讓xargs的處理,與-I
選項:
hg status -n | xargs -I FileName rm FileName
-I
同時增加了安全性,但會降低效率,因爲只有一個文件名會被傳遞爲 'RM'
一個例子:
$ printf "%s\n" one "2 two" "three 3 3" | xargs printf "%s\n"
one
2
two
three
3
3
$ printf "%s\n" one "2 two" "three 3 3" | xargs -I X printf "%s\n" X
one
2 two
three 3 3
除了-0
,新xargs
有選項-d
它可以幫助你做這樣的事情:
<command returning \n-separated paths> | xargs -d \\n rm -v
沒有回答這些問題的幫助? – Mikel 2012-04-05 16:35:01
是的,謝謝,已接受您的答案 – Dori 2012-04-06 15:10:42