【问题标题】:Find and execute command on all files in directory that have a specific folder name在目录中具有特定文件夹名称的所有文件上查找并执行命令
【发布时间】:2018-10-26 21:57:12
【问题描述】:

我想使用 find 命令对目录内的所有文件执行特殊命令,这些文件包含在多个不同目录中,其中包含特定关键字(关键字是“Alpha”),并将输出保留在我运行命令的初始文件的工作目录。

该命令需要您提供初始文件以执行该命令,然后提供新转换文件的名称。就这样

command file_to_run_command_on.txt new_file.txt

这是我的代码

find $PWD -name *.txt* -exec command {} new_file. \;

现在,即使在子目录中,它也会在该目录中找到所有文本文件,并在我运行初始查找命令的目录中仅输出一个文件。我也不确定如何在目录中添加对关键字的附加搜索。感谢所有建议!

【问题讨论】:

  • 您想知道为什么command file1.txt newfile. 后跟command file2.txt newfile. 只会产生一个输出文件吗?这是因为您为两者指定了相同的输出名称,因此它们会不断覆盖该名称
  • @thatotherguy 是的,但是如果它保留在包含该初始文件的本地目录中,则这些文件不会被覆盖,因为所有这些文件都位于它们自己的唯一目录中。我明白为什么最初的帖子对此并不清楚,所以我改变了措辞。这更有意义吗?

标签: bash shell find


【解决方案1】:

-exec 在您启动 find 的目录中运行命令。

-execdir 在匹配文件的目录中运行命令。

要仅查找父级包含特定文件的 *.txt* 文件,您可以使用:

find "$PWD" -path "*keyword*/*.txt*" -execdir command {} new_file \;

这将为foo/bar/some-keyword-dir/baz/etc/file.txts 运行命令,但不适用于foo/bar/baz/file.txts(父目录名称中没有关键字)或foo/bar/some-keyword-dir/baz/file.tar(不是*.txt*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2020-12-17
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多