[英]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.