Я использую следующую строку, чтобы найти все подкаталоги PWD и работать svnadmin verify
на каждом каталоге (я уже знаю, что они - репозитории Подверсии),
find ./* -maxdepth 0 -exec svnadmin verify {} \;
Это работает хорошо кроме того, что вывод похож на это:
* 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.
Я действительно хотел бы find
распечатать имя файла прежде, чем выполниться svnadmin verify
команда, для создания входа легче.
Я попытался сжать немного ls
там, но bodged это, как я должен сделать это (предпочтительно просто)?
просто добавьте -printf
опция прежде
find -printf '%p' -exec command \;
Если Вы не хотите рекурсивно вызывать, нет никакого смысла в использовании find
. Намного более просто сделать это в оболочке непосредственно:
for d in */; do echo "$d"; svnadmin verify "$d"; done
Эти for d in */
найдет все каталоги (эти */
, гарантирует только каталоги, и никакие файлы не найдены); эти echo "$d"
распечатает название каталога; эти svnadmin verify "$d"
проверит каталог.
Это может быть выполнено или непосредственно из командной строки или из сценария без изменения в формате.
find ./* -maxdepth 0 -type d -exec bash -c 'echo "{}"; svnadmin verify "{}"' \;
я добавил -type d
, если это - только каталоги.
Попробуйте это:
for f in * ; do echo -n "${f}:"; svnadmin verify "${f}"; done
, Если Вы просто хотите каталоги (Благодаря примечанию @kos):
for f in */ ; do echo -n "${f}:"; svnadmin verify "${f}"; done
. -maxdepth 1
вместо ./*
, Вам нужен только первый уровень в структуре папок -type d
, Вам нужны только папки ! -name "."
, Вам не нужно .
-exec
для запуска оболочки sh -c
для запуска команд в оболочке команда
find . -maxdepth 1 -type d ! -name "." -exec sh -c 'echo "{}"; svnadmin verify "{}"' \;
<час> или короче
-prune
, если файл является каталогом, не убывайте в него команда
find . -mindepth 1 -prune -exec sh -c 'echo "{}"; svnadmin verify "{}"' \;
Может быть полезно передать по каналу эти find
вывод к read
цикл:
find . | while read d; do echo "=== ${d}: ==="; svnadmin verify ${d}; done
Это позволяет Вам выполнять более сложную, составную последовательность команды с именами файлов, возвращенными find
, как в этом воображении ls
пример:
find . | while read f; do echo ${f} | figlet -k; done
Это будет печатать имя и содержимое файлов только рекурсивно ..
find . -type f -printf '\n\n%p:\n' -exec cat {} \;
find
имеет флаги опции для печати, которые уже упоминаются в других ответах. Если мы смотрим на проблемную форму перспектива выполнения нескольких команд для того же в настоящее время обрабатываемого файла, find
позволяет использовать несколько -exec
операторы. Это означает, что мы могли выбрать использование:
find ./* -maxdepth 0 -exec echo {} \; -exec svnadmin verify {} \;
Снова, обратите внимание, что этот подход применим к не просто печати с echo
, printf
, или другие утилиты, но также и другие команды.
Лучше всего использовать find с XARGS, так как именно для этого у него есть подробная опция:
xargs --verbose / -t
Print the command line on the standard error output before executing it.
Так что в вашем примере:
find ./* -maxdepth 0 -type d | xargs -n1 --verbose svnadmin verify
svnadmin verify ./REPO_DIR_A
* Verified revision ...
svnadmin verify ./REPO_DIR_B
* Verified revision ...