使用-exec时如何在find命令中输出文件名?

Arr*_*cal 56 command-line bash scripts find

我使用以下行查找 PWD 的所有子目录并svnadmin verify在每个目录上运行(我已经知道它们是 Subversion 存储库)

find ./* -maxdepth 0 -exec svnadmin verify {} \;
Run Code Online (Sandbox Code Playgroud)

这很有效,除了输出看起来像这样的事实:

* 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.
Run Code Online (Sandbox Code Playgroud)

我真的很想find在执行svnadmin verify命令之前打印文件名,以使日志记录更容易。

我试图ls在那里挤一点,但把它固定起来,我应该怎么做(最好是简单的)?

Fel*_*xJN 60

只需-printf在之前添加一个选项

find -printf '%p' -exec command \;
Run Code Online (Sandbox Code Playgroud)

  • @Arronical 如果这是你想要的格式,你可以用更简单的 `-print` 替换(格式化的)`-printf '%p\n'` (20认同)
  • `find -name <a_name> -print -exec 命令 {} \;` (10认同)
  • 可爱的,我将 `'%p'` 更改为 `'%p\n'`,这样名称就位于它自己行上的验证输出之前。 (5认同)

ter*_*don 15

如果您不想递归,则使用find. 直接在 shell 中执行要简单得多:

for d in */; do echo "$d"; svnadmin verify "$d"; done
Run Code Online (Sandbox Code Playgroud)

for d in */会发现所有的目录(在*/确保只有目录和找不到文件); 在echo "$d"将打印目录的名称; 在 svnadmin verify "$d"将检查目录。

这可以直接从命令行运行,也可以从脚本中运行而无需更改格式。

  • 这看起来确实是实现我的目标的更好方法,但我不得不给 Fiximan 提供答案,因为我的标题和问题引用了“find”太多。感谢您提高我的知识! (2认同)

jij*_*inp 8

find ./* -maxdepth 0 -type d -exec bash -c 'echo "{}"; svnadmin verify "{}"' \;
Run Code Online (Sandbox Code Playgroud)

-type d如果它只是目录,我已经添加。


May*_*hux 5

尝试这个:

for f in * ; do echo  -n "${f}:"; svnadmin verify "${f}"; done
Run Code Online (Sandbox Code Playgroud)

如果您只想要目录(感谢@kos 注意):

for f in */ ; do echo  -n "${f}:"; svnadmin verify "${f}"; done
Run Code Online (Sandbox Code Playgroud)