相关疑难解决方法(0)

如何使用“{}”重定向通过 find 的 -exec 选项运行的命令的输出?

我正在尝试自动svnadmin dump执行备份脚本的命令,并且我想做这样的事情:

find /var/svn/* \( ! -name dir -prune \) -type d -exec svnadmin dump {} > {}.svn \;
Run Code Online (Sandbox Code Playgroud)

这似乎有效,因为它查看 中的每个 svn 存储库/var/svn,并svnadmin dump在其上运行。

但是,{}exec 命令中的第二个不会替换正在处理的目录的名称。它基本上只产生一个名为{}.svn.

我怀疑这是因为 shell 解释>为结束find命令,并尝试将 stdout 从该命令重定向到名为{}.svn.

有任何想法吗?

linux redirection find

29
推荐指数
2
解决办法
2万
查看次数

`sh -c 'some shell code' sh` 中的第二个 sh 是什么?

我遇到了以下代码段:

sh -c 'some shell code' sh …
Run Code Online (Sandbox Code Playgroud)

(其中表示零个或多个附加参数)。

我知道第一个sh是命令。我知道sh -c应该执行提供的 shell 代码(即some shell code)。第二个目的是sh什么?


免责声明

类似或相关的问题有时会sh -c在答案中正确使用后作为后续问题出现,并且提问者(或其他用户)想详细了解答案的工作原理。或者它可能是“这段代码做什么?”类型的更大问题的一部分。当前问题的目的是在下面提供规范的答案。

这里涵盖的主要问题、类似或相关问题是:

  1. 什么是第二次shsh -c 'some shell code' sh …
  2. 什么是第二次bashbash -c 'some shell code' bash …
  3. 什么find-shfind . -exec sh -c 'some shell code' find-sh {} \;
  4. 如果some shell code在一个 shell 脚本中并且我们调用了./myscript foo …,那么 …

sh shell-script positional-parameter

8
推荐指数
1
解决办法
514
查看次数

如何从`find -exec`中作为{}传递的路径名中删除扩展名?

鉴于需要从位于子目录中的视频文件中提取音频的情况,如何正确命名生成的文件?

以下单行工作,但保留旧的文件扩展名。

find -name "*.mp4" -exec ffmpeg -i {} -vn -acodec copy {}.aac -hide_banner \;
Run Code Online (Sandbox Code Playgroud)

当前结果:

foobar.mp4 --> foobar.mp4.aac
Run Code Online (Sandbox Code Playgroud)

期望的结果:

foobar.mp4 --> foobar.aac
Run Code Online (Sandbox Code Playgroud)

unix find string-manipulation file-extension

4
推荐指数
1
解决办法
1138
查看次数

使用通配符时,“查找”实用程序不会输出所有文件

跑步:

$find . -name *.exe
Run Code Online (Sandbox Code Playgroud)

给出:

./MakeItSo_1.2.2/MakeItSo_1.2.2/MakeItSo.exe
./MakeItSo.exe
Run Code Online (Sandbox Code Playgroud)

但这些并不是目录中唯一的 exe 文件。例如,运行

$find . -name ATLTester.exe
Run Code Online (Sandbox Code Playgroud)

给出:

./Debug/ATLDmoVexaTester.exe
Run Code Online (Sandbox Code Playgroud)

find wildcards

3
推荐指数
1
解决办法
276
查看次数

Mac 上“find -type d”的替代方法是什么?

在 Linux 上find -type d工作列出所有子目录,忽略文件。

但是,当我在 Mac (High Sierra) 上运行它时,出现错误:find: illegal option -- t.

在深入研究谷歌时,除了建议我使用ls和解析输出的答案外,我还没有找到任何明显的命令行替代grep方案,或者为 GUI 应用程序或非命令行用户提供解决方案(通过 finder 等) .)

用例是将此输出通过管道传输到模糊查找器,该查找器需要换行符分隔的项目列表。例如,我可以使用文件和ripgreprg --files -g "" | fzy. Ripgrep 似乎不支持--folders我在 github 问题跟踪器上粗略浏览的选项等。

在 Linux 上find -type d | fzy“正常工作”。直到安装其他软件包,但我真的希望预先安装一些东西。

我可以通过一些脚本来解决这个问题,但我很想听听这里的最佳实践。

bash command-line macos

1
推荐指数
1
解决办法
592
查看次数