我如何剪輯“查找”命令的結果?
我執行以下命令:-find / -type f -name fs-type -exec svnlook tree {} ; |egrep “/$”
結果是svnlook:無法打開文件’/var/lib/svn/repos/b1me/products/payone/generic/code/core/db/fs-type/format’:不是目錄svnlook:無法打開文件’/var/lib/svn/repos/b1me/products/payone/generic/code/fees/db/fs-type/format’:不是目錄
也許我們必須讓“find”命令給我們沒有“db/fs-type/format”的路徑,換句話說,我們必須剪裁“find command”的輸出……但我怎麼能做到這一點???
這裡的問題不是 find 命令。find 命令正在執行您告訴它執行的操作,例如,它正在查找
fs-type
在整個文件系統中命名的所有出現的正則文件。然後,您將 find 命令的結果傳遞給
svnlook tree
.該
svnlook tree
命令需要一個目錄,因為它是參數而不是您提供的正常文件。您傳遞到的目錄svnlook tree
應該有一個名為的文件format
,其中包含儲存庫的修訂號,這就是您收到上述錯誤消息的原因。它是
svnlook
給你你所看到的錯誤消息的命令。您需要做的是找出路徑/var/lib/svn/repos/
中的哪個目錄是正確的傳遞給svnlook
.您還可以通過閱讀有關svn的一些資訊來幫助自己,以更好地了解您正在使用的系統。
編輯
沒有簡單的方法可以找到所有 svn 儲存庫
您可以搜尋系統上的所有 .svn 目錄並
svn info
在它們上執行,然後檢查“Repository Root:
”的輸出。如果您在一個公共儲存庫中有許多項目,那麼它的輸出將需要通過 uniq 因此sudo find / -name .svn -exec dirname {} \; | \ xargs svn info | grep "Repository Root:" | uniq \ sed 's/Repository Root: file:\/\///'
你會得到類似
/var/svn/repos
輸出的東西。上面列出了分散在文件系統中的項目的所有儲存庫。然後你可以
svnlook tree /var/svn/repos |grep /
為上面命令的輸出中列出的每個儲存庫找到您想要的內容。上述方法的唯一問題是,如果目錄樹已被刪除,並且它包含受 svn 控制的項目,並且該項目位於唯一的儲存庫中,那麼您將找不到它。