簡體   English   中英

如何從svn status循環linux中的文件

[英]how to loop files in linux from svn status

作為Linux中的新手,我有以下問題。 我有文件列表(這次是由svn狀態產生的),我想創建一個腳本來循環它們並用4個空格替換制表符。

所以我想要

....
D      HTML/templates/t_bla.tpl
M      HTML/templates/t_list_markt.tpl
M      HTML/templates/t_vip.tpl
M      HTML/templates/upsell.tpl
M      HTML/templates/t_warranty.tpl
M      HTML/templates/top.tpl
A  +   HTML/templates/t_r1.tpl
....

喜歡的東西

for i in <files>; expand -t4;do cp $i /tmp/x;expand -t4 /tmp/x > $i;done;

但我不知道該怎么做......

您可以使用此命令:

svn st | cut -c8- | xargs ls

這將刪除前8個字符,只留下文件名列表,沒有Subversion標志。 您還可以在cut前添加grep以僅過濾某些類型的更改,例如/^M/ xargs將文件列表作為參數傳遞給給定命令(在本例中為ls )。

我會像這樣使用sed:

for i in files
do
    sed -i 's/\t/    /' "$i"
done

那個大塊有四個空間。 ;-)

我沒有測試過,但它應該工作。 我會備份你的文件以防萬一。 -i標志意味着它將在原地對文件進行替換,但如果它變得混亂,您將希望能夠恢復它們。

這假設$ files包含文件名。 但是,您也可以使用Adam的方法來獲取文件名,只需使用上面的sed命令而不使用“$ i”。

不要求任何投票,但為了記錄,我將發布@Adam Byrtek@Dan Fego的綜合答案:

svn st | cut -c8- | xargs sed -i 's/\t/    /'

我無法用真正的subversion輸出測試它,但這應該做的工作:

svn st | cut -c8- | while read file; do expand -t4 $file > "$file-temp"; mv "$file-temp" "$file"; done

svn st | cut -c8- svn st | cut -c8-將生成一個沒有subversion標志的文件列表。 然后, read將保存變量$file中的每個條目,並使用expand來替換每個文件中四個空格的選項卡。

不是你要問的,但也許你應該在subversion中研究提交鈎子?

您可以創建一個鈎子來阻止在一行開頭包含選項卡的任何代碼的簽到,或者根本不包含選項卡。

在subversion服務器上的repo目錄中,將有一個名為hooks的目錄。 在那里放一些可執行文件,稱為'pre-commit',它將在允許提交任何內容之前運行。 如果您願意,它可以返回阻止提交的狀態。

這是我必須停止檢查語法錯誤的php文件:

#!/bin/bash
REPOS="$1"
TXN="$2"
PHP="/usr/bin/php"

SVNLOOK=/usr/bin/svnlook

$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" > /dev/null

if [ $? -ne 0 ]
then
  echo 1>&2
  echo "You must enter a comment" 1>&2
  exit 1
fi


CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS" | awk '{print $2}'`

for LINE in $CHANGED
  do
  FILE=`echo $LINE | egrep \\.php$`
  if [ $? == 0 ]
    then
    MESSAGE=`$SVNLOOK cat -t "$TXN" "$REPOS" "${FILE}" | $PHP -l`
    if [ $? -ne 0 ]
      then
      echo 1>&2
      echo "***********************************" 1>&2
      echo "PHP error in: ${FILE}:" 1>&2
      echo "$MESSAGE" | sed "s| -| $FILE|g" 1>&2
      echo "***********************************" 1>&2
      exit 1
    fi
  fi
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM