gpt4 book ai didi

linux - 在每个目录中查找子目录和进程文件的名称

转载 作者:太空宇宙 更新时间:2023-11-04 09:33:43 25 4
gpt4 key购买 nike

假设 /tmp 有子目录 /test1/test2/test3 等等,每个里面都有多个文件。

我必须运行 while 循环或 for 循环来查找目录的名称(在本例中为 /test1/test2, ...)并运行一个命令来处理每个目录中的所有文件。

例如,我必须获取 /tmp 下的目录名称,这将是 test1test2、...对于每个子目录,我必须处理其中的文件。

我该怎么做?


澄清:

这是我要运行的命令:

find /PROD/140725_D0/ -name "*.json" -exec /tmp/test.py {} \;

140725_D0 是要处理的一个 子目录的示例 - 有多个,名称不同。

因此,通过使用 forwhile 循环,我想找到所有子目录并对每个子目录中的文件运行一个命令。

forwhile 循环应该迭代地替换上面 find 命令中的硬编码名称 140725_D0

最佳答案

你应该能够用一个来做find带有嵌入式 shell 命令的命令:

find /PROD -type d -execdir sh -c 'for f in *.json; do /tmp/test.py "$f"; done' \;

注:-execdir不符合 POSIX,但 BSD (OSX) 和 GNU (Linux) 版本的 find支持它;请参阅下面的 POSIX 替代方案。

  • 方法是让find匹配目录,然后在每个匹配的目录中,执行带有文件处理循环的 shell ( sh -c '<shellCmd>' )。
  • 如果不是所有的子目录都保证有*.json文件,将 shell 命令更改为 for f in *.json; do [ -f "$f" ] && /tmp/test.py "$f"; done

更新:还有两个注意事项;帽子尖 kenorb's answer :

  • 默认情况下,find处理输入目录的整个子树。要将匹配限制为直接 子目录,请使用 -maxdepth 1 [1]:

    find /PROD -maxdepth 1 -type d ...
  • 如前所述,-execdir - 在当前正在处理的目录中运行传递给它的命令 - 不符合 POSIX 标准;您可以使用 -exec 解决此问题相反,包括一个 cdshell 命令中使用手边的目录路径 ( {}) 命令:

    find /PROD -type d -exec sh -c 'cd "{}" && for f in *.json; do /tmp/test.py "$f"; done' \;

[1] 严格来说,您可以将 -maxdepth find 上的选项输入文件路径之后的任何位置命令行 - 作为一个选项,它不是位置性的。但是,GNU find将发出警告,除非您将其放在之前 测试(例如 -type) 操作(例如-exec ).

关于linux - 在每个目录中查找子目录和进程文件的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28859618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com