Как Вы производите имя файла в команде находки при использовании - должностное лицо?

Я использую следующую строку, чтобы найти все подкаталоги 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 это, как я должен сделать это (предпочтительно просто)?

33
задан 22 July 2015 в 04:48

9 ответов

просто добавьте -printf опция прежде

find -printf '%p' -exec command \;
36
ответ дан 23 November 2019 в 00:33

Если Вы не хотите рекурсивно вызывать, нет никакого смысла в использовании find. Намного более просто сделать это в оболочке непосредственно:

for d in */; do echo "$d"; svnadmin verify "$d"; done

Эти for d in */ найдет все каталоги (эти */, гарантирует только каталоги, и никакие файлы не найдены); эти echo "$d" распечатает название каталога; эти svnadmin verify "$d" проверит каталог.

Это может быть выполнено или непосредственно из командной строки или из сценария без изменения в формате.

14
ответ дан 23 November 2019 в 00:33
find ./* -maxdepth 0 -type d -exec bash -c 'echo "{}"; svnadmin verify "{}"' \;

я добавил -type d, если это - только каталоги.

6
ответ дан 23 November 2019 в 00:33

Попробуйте это:

for f in * ; do echo  -n "${f}:"; svnadmin verify "${f}"; done

, Если Вы просто хотите каталоги (Благодаря примечанию @kos):

for f in */ ; do echo  -n "${f}:"; svnadmin verify "${f}"; done
5
ответ дан 23 November 2019 в 00:33
  • Использование . -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 "{}"' \; 
2
ответ дан 23 November 2019 в 00:33

Может быть полезно передать по каналу эти 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
0
ответ дан 23 November 2019 в 00:33

Это будет печатать имя и содержимое файлов только рекурсивно ..

find . -type f -printf '\n\n%p:\n' -exec cat {} \;
-1
ответ дан 23 November 2019 в 00:33

find имеет флаги опции для печати, которые уже упоминаются в других ответах. Если мы смотрим на проблемную форму перспектива выполнения нескольких команд для того же в настоящее время обрабатываемого файла, find позволяет использовать несколько -exec операторы. Это означает, что мы могли выбрать использование:

find ./* -maxdepth 0 -exec echo {} \; -exec svnadmin verify {} \; 

Снова, обратите внимание, что этот подход применим к не просто печати с echo, printf, или другие утилиты, но также и другие команды.

1
ответ дан 23 November 2019 в 00:33

Лучше всего использовать 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 ...
1
ответ дан 20 May 2020 в 07:54

Другие вопросы по тегам:

Похожие вопросы: