2009-09-10 12 views
7

Mam dość skomplikowaną konfigurację instalacji dla naszej witryny Drupal, która jest kombinacją CVS i SVN. Używamy CVS, aby uzyskać najnowsze wersje modułów i wdrażamy je za pomocą SVN. Niestety, gdy aktualizacje CVS usuwają pliki, Subversion twierdzi, że nie zostały usunięte w SVN. Próbuję wykonać kilka skryptów powłoki i Perl, aby uruchomić komendę svn rm dla wszystkich tych plików, które zostały już usunięte z systemu plików, ale nie dotarłem daleko. To, co mam do tej pory to:Wyjście powłoki rury do polecenia svn del?

svn st | grep ! 

ten generuje listę wszystkich plików usuniętych z systemu plików tak:

!  panels_views/panels_views.info 
!  panels_views/panels_views.admin.inc 
!  contexts/term.inc 
!  contexts/vocabulary.inc 
!  contexts/terms.inc 
!  contexts/node_edit_form.inc 
!  contexts/user.inc 
!  contexts/node_add_form.inc 
!  contexts/node.inc 
etc. . . 

Jednak chcę jakoś uruchomić svn del na każdym z tych kwestia. Jak mogę uzyskać te wyniki w moim skrypcie Perla, lub alternatywnie, w jaki sposób mogę uruchomić svn del na każdej z tych linii?

Edit: Dokładna polecenie użyłem, z pewną pomocą wszystkim był

svn st | grep ^! | cut -c 9- | xargs svn del 

Odpowiedz

10

Spróbuj użyć xargs, tak:

svn st | grep ^! | cut -f2 | xargs svn rm 

Komenda xargs trwa linie na jej standardu wejściowe, i odwraca je i używa tych linii jako parametrów linii poleceń na svn rm. Domyślnie xargs używa wielu linii z każdym wywołaniem swojego polecenia, co w przypadku svm rm jest w porządku.

Być może będziesz musiał poeksperymentować z poleceniem cut, aby uzyskać prawidłowe wyniki. Domyślnie cut używa tabulatora jako ogranicznika, a Subversion może tam umieszczać spacje. W takim przypadku może być konieczne użycie cut -d' ' -f6 lub coś podobnego.

Jak zwykle podczas budowania takiego potoku poleceń, należy uruchamiać porcje na raz, aby upewnić się, że wszystko wygląda dobrze. Tak więc uruchom wszystko, aż do polecenia cut, aby upewnić się, że masz listę nazw plików, które oczekujesz,, aby ponownie uruchomić ją pod numerem "| xargs svn rm" na końcu.

+2

Zmieniłbym "grep!" Na "grep ^!", Aby upewnić się, że nie zabijamy przypadkowo plików, które na ich ścieżce mają wykrzykniki. –

+0

To mądry pomysł. –

+0

Cudownie, nie miałem pojęcia o cięciu ani xargs. Wiedziałem, że Perl nie jest najprostszym sposobem, ale mam trochę znajomości. – jergason

1
svn st | egrep ^! | cut -b 9- | xargs svn del 
0

tylko jako alternatywa do tych powyżej, chciałbym użyć czegoś takiego:

svn st | awk '$1=="!"{print $2}' | xargs svn del 

znajdę wzór dopasowywania języka AWK jest bardzo przydatny do zadań takich jak ten.

Powiązane problemy