2009-12-07 40 views
1

我想在Cygwin Windows系統上使用xargs來刪除本地刪除的SVN文件。cygwin上的XArgs命令是損壞文件路徑

我運行下面的命令,其產生以下輸出:

svn status | grep '^\!' | sed 's/! *//' 

weblings-WebPlatform中\廠商\碼頭-7.0.0.pre5 \上下文可用\測試annotations.d \ META- INF \ MANIFEST.MF weblings-WebPlatform中\供應商\碼頭,7.0.0.pre5 \上下文可用\ TEST-annotations.d \ WEB-INF \碼頭-env.xml

然後當我運行以下命令我得到以下錯誤:

svn status | grep '^\!' | sed 's/! *//' | xargs -I% svn rm % 


svn: 'weblings-webplatformvendorjetty-7.0.0.pre5contexts-availabletest-annotations.dMETA-INFMANIFEST.MF' does not exist 

我試過使用cygpath轉換svn狀態路徑,但它似乎沒有做任何事情。

+0

嗯。我從cygwin下的'svn status'中得到'/'。 – retracile 2009-12-07 23:24:23

+0

您使用的是svn: 「which svn」 我的是: 「/ cygdrive/c/Program Files(x86)/ CollabNet/Subversion Client/svn」 – Dougnukem 2009-12-07 23:27:30

+0

Mine是'/ usr/bin/svn',所以它是來自cygwin的。 – retracile 2009-12-07 23:30:07

回答

3

使用cygpath將路徑更改爲unix格式應該可以工作我認爲..'\'是Linux世界中的轉義字符,看起來像xargs一樣處理它。喜歡的東西:

svn status | grep '^\!' | sed 's/! *//' | cygpath -m | xargs -I% svn rm % 
0

指定爲/usr/bin/svn cygwin的svn(如果需要安裝它),這樣您在輸出svn status得到/的。不過要小心!你不想混合不同的svn版本,比如1.4,1.5,1.6,否則你會變得更有趣。

0

使用sed將\更改爲/。 (正斜線與Windows API和幾乎所有的Windows程序一起工作,他們必須被拒絕才能工作。)你想繼續使用相同版本的svn(就像你在其他地方使用的那樣,用GUI說),所以你不必擔心會破壞數據。

或者改變一切,以使用cygwin的svn版本。

根本問題是xargs重新解釋數據,無論是因爲它是如何在cygwin上工作,或者它必須通過一個shell(然後這樣做),我不知道(也不能測試,直到明天)。

0

如果我正確理解你的問題,那麼我會做一個小的調整:加雙引號來替代變量,在xargs的語句:

        xargs -I% svn rm "%" 

否則,它包含一個空格一個給定的路徑會告訴rm刪除兩個或更多文件,其中沒有一個存在。 I.E.像c:\ Cygwin \ My Stuff這樣的行作爲輸入傳遞給rm變爲

rm c:\ Cygwin \ My; rm東西