Używam następującego wiersza, aby znaleźć wszystkie podkatalogi PWD i uruchomić svnadmin verify
w każdym katalogu (już wiem, że są to repozytoria Subversion)
find ./* -maxdepth 0 -exec svnadmin verify {} \;
Działa to dobrze, poza tym, że dane wyjściowe wyglądają tak:
* Verifying repository metadata ...
* Verifying metadata at revision 1 ...
* Verifying metadata at revision 2 ...
* Verifying metadata at revision 4 ...
* Verifying metadata at revision 5 ...
* Verifying metadata at revision 6 ...
* Verifying metadata at revision 9 ...
* Verifying metadata at revision 10 ...
* Verifying metadata at revision 12 ...
* Verifying metadata at revision 14 ...
* Verifying metadata at revision 15 ...
* Verifying metadata at revision 18 ...
* Verifying metadata at revision 20 ...
* Verifying metadata at revision 22 ...
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.
* Verified revision 3.
* Verified revision 4.
* Verified revision 5.
* Verified revision 6.
* Verified revision 7.
* Verified revision 8.
* Verified revision 9.
* Verified revision 10.
* Verified revision 11.
* Verified revision 12.
* Verified revision 13.
* Verified revision 14.
* Verified revision 15.
* Verified revision 16.
* Verified revision 17.
* Verified revision 18.
* Verified revision 19.
* Verified revision 20.
* Verified revision 21.
* Verified revision 22.
* Verified revision 23.
* Verified revision 0.
* Verifying repository metadata ...
* Verifying metadata at revision 4 ...
* Verifying metadata at revision 5 ...
* Verifying metadata at revision 6 ...
* Verifying metadata at revision 7 ...
* Verifying metadata at revision 9 ...
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.
* Verified revision 3.
* Verified revision 4.
* Verified revision 5.
* Verified revision 6.
* Verified revision 7.
* Verified revision 8.
* Verified revision 9.
Naprawdę chciałbym find
wydrukować nazwę pliku przed wykonaniem svnadmin verify
polecenia, aby ułatwić logowanie.
Próbowałem się trochę ls
wcisnąć, ale wytrząsałem, jak mam to zrobić (najlepiej po prostu)?
command-line
bash
scripts
find
Arroniczny
źródło
źródło
'%p'
na,'%p\n'
aby nazwa poprzedza weryfikację wyjścia we własnej linii.-printf '%p\n'
prostszym-print
find -name <a_name> -print -exec command {} \;
Jeśli nie chcesz się powtarzać, nie ma sensu używać
find
. O wiele łatwiej jest to zrobić bezpośrednio w powłoce:for d in */
Znajdzie wszystkie katalogi (The*/
, zapewnia jedynie katalogów i żadne pliki nie znajdują);echo "$d"
wypisze nazwę katalogu użytkownika;svnadmin verify "$d"
sprawdzi katalog.Można to uruchomić bezpośrednio z wiersza poleceń lub ze skryptu bez zmiany formatu.
źródło
find
tak bardzo. Dzięki za poszerzenie mojej wiedzy!dotglob
iwglobstar
bash, co tworzy dłuższy, bardziej skomplikowany skrypt. Zwykle zapisuję globusy do dużych, skomplikowanych zadań, podczas gdyfind
składnia jest łatwiejsza do zebrania w locie, po prostu łącząc kilka filtrów i poleceń w jedno-liniowy.find
prostszy. Zawsze wolę globusy,find
ponieważ nie tylko uważam je za znacznie prostsze, ale są również bezpieczniejsze, gdy mamy do czynienia z dowolnymi nazwami plików przekazywanymi do innych programów.Dodałem,
-type d
jeśli to tylko katalogi.źródło
{}
, przynajmniej wsvnadmin verify {}
-exec
spawn jest powłoką potomną, w której uruchamiane są 2 polecenia, używając;
jako końca linii?Spróbuj tego:
Jeśli chcesz tylko katalogów (dzięki Uwaga @kos):
źródło
for f in */
przetworzy tylko katalogi. -maxdepth 1
zamiast./*
, potrzebujesz tylko pierwszego poziomu w strukturze folderów-type d
, potrzebujesz tylko folderów! -name "."
, nie potrzebujesz.
-exec
aby uruchomić powłokęsh -c
do uruchamiania poleceń wewnątrz powłokiTwoje polecenie
lub krócej
-prune
jeśli plik jest katalogiem, nie schodź do niegoTwoje polecenie
źródło
-prune
wygląda ciekawie. Kiedyś./* -maxdepth 0
unikałem powrotu.
z polecenia find. Nie powoduje to żadnego krytycznego błędu, ale wolę nie mieć tego w swoich wynikach.find
ma flagi opcji do drukowania, które są już wspomniane w innych odpowiedziach. Jeśli spojrzymy na problem z perspektywy wykonywania wielu poleceń dla tego samego aktualnie przetwarzanego pliku,find
pozwala to na użycie wielu-exec
instrukcji. Oznacza to, że możemy zdecydować się na użycie:Ponownie należy pamiętać, że to podejście ma zastosowanie nie tylko do drukowania
echo
,printf
lub innych mediów, ale także innych poleceń.źródło
Przydatne może być przesłanie danych
find
wyjściowych doread
pętli:Pozwala na wykonanie bardziej skomplikowanej, złożonej sekwencji poleceń z nazwami plików zwracanymi przez
find
, jak w tym fantazyjnymls
przykładzie:źródło
Spowoduje to wydrukowanie rekursywnie nazwy i zawartości tylko plików.
źródło