2015-11-12 32 views
0

我試圖使用下面的命令,但它需要運行sudo才能工作,我該怎麼做?如何將sudo添加到grep並刪除命令?

cd /usr/local/bin && \ 
ls -l /usr/local/bin | grep '../Library/Frameworks/Python.framework/Versions/2.7' | awk '{print $9}' | xargs rm 
+0

你不能'sudo su'進入root shell嗎? – asimovwasright

+0

我想我可以,但我想知道在哪裏添加到行中。 – Stickers

+0

這取決於哪個命令需要它? – asimovwasright

回答

1

這是一個可怕刪除/usr/local/bin中指向../Library/Frameworks/Python.framework/Versions/2.7的任何符號鏈接的方法。

它分析ls(請參閱this爲什麼你不想這樣做)。

它使用grep從理論上講,至少會比預期的要多。

如果找到的文件名中有空格,則不安全/正常工作。

這對任務來說也過於複雜。

試試這個:

find /usr/local/bin -lname '*/../Library/Frameworks/Python.framework/Versions/2.7*' 

,如果打印出您所期望的事物的名稱(添加-ls到最後拿到ls -l式的輸出,而不是),然後使用

find /usr/local/bin -lname '*/../Library/Frameworks/Python.framework/Versions/2.7/*' -delete 

到刪除它們(假設OS X find支持-delete)。

如果它不使用-execdir rm {} \+-execdir rm {} \;-exec rm {} \+-exec rm {} \;(按照該順序,直到找到一個有效的)。

使用-okdir-ok代替-execdir-exec會導致find打印就是了運行它之前確認你運行的命令(類似於rm -i會提示爲每個文件被刪除)。

然後,您可以在整個find命令中使用sudo,或者根據需要使用rm命令。

+0

謝謝,但沒有爲我找到任何東西。我也嘗試在'Library/..'之前刪除'..'' – Stickers

+0

你知道'/ usr/local/bin'中有東西需要刪除嗎?你可以運行'ls -l'來查看它實際*鏈接到的內容嗎? –

+0

是的,有文件,例如2to3,pip,python等 – Stickers

1

從我的經驗來看,這是給你帶來麻煩的sudo cd

您可以cd /usr/local/bin然後運行sudo ls -l ...

OR

看起來cd因爲您指定的路徑是不是真的需要。因此,請不要使用cd命令並在任何地方使用完整路徑。

+0

'&&'打破了列表,所以'sudo'隻影響'cd',假設'sudo cd ... && ls ...'。 –

+0

是的,這就是爲什麼我說要分開做。 – dan08

+0

我的觀點是'cd'本身沒有涉及。 * &&或'||'列表中的任何內容都具有相同的效果。 –