gpt4 book ai didi

linux - 在多个目录中选择特定目录

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:31:44 25 4
gpt4 key购买 nike

我正在尝试编写一个 shell 脚本,循环遍历父目录下的所有目录,并跳过在叶级别具有空文件夹“I_AM_Already_Processed”的目录。

父目录作为 shell 脚本的输入提供:

. selectiveIteration.sh /Employee

父目录下结构如下图( Employee 目录包含按年 -> 月度 -> 日 -> 小时 fork 的数据)

/Employee/alerts/output/2014/10/08/HOURS/Actual_Files

Shell 脚本试图找出尚未处理的目录。例如:

让我们考虑三个小时的数据,日期:10/08/2014

1.  /USD/alerts/output/2014/10/08/2(hourly_directory)/Actual_file + 
directory_with_name(I_AM_Already_Processed)
2. /USD/alerts/output/2014/10/08/3(hourly_directory)/Actual_file +
directory_with_name(I_AM_Already_Processed)
3. /USD/alerts/output/2014/10/08/(hourly_directory)/Actual_file

在上面的示例中,叶目录 2 和 3 已被处理,因为它们包含名为“I_AM_Already_Processed”,而目录 4 尚未处理。

因此 shell 脚本应该跳过文件夹 2、3 但应该处理目录 4(在输出中打印此目录)。

我做过的研究/工作:

到目前为止,我能够遍历目录结构并从根目录到叶目录遍历所有文件夹/文件,但我不确定如何检查特定文件并在该文件存在时跳过该目录。 (在引用了一些教程和 StackOverflow 上的旧帖子后,我能够做到这一点)

我是 shell 脚本的新手,这是我第一次编写 shell 脚本,所以如果这个问题太基础了,请原谅。努力学习。

欢迎任何建议。提前致谢。

最佳答案

要检查 some_directory 是否已被处理,只需执行类似

的操作
find some_directory -type d -links 2 -name 'I_AM_Already_Processed'

如果有,将返回目录名称,如果没有,则不返回任何内容。注意 -links 2 测试目录是否为叶子(这意味着它只有指向其父目录和自身的链接,但没有指向任何子目录的链接)。参见 this answer获取更多信息。

所以在脚本中,你可以这样做

#!/bin/bash
directory_list=(/dir1 /dir2)
for dir in "${directory_list[@]}"; do
if [[ -n $(find "$dir" -type d -links 2 -name 'I_AM_Already_Processed' -print -quit) ]]; then
echo 'Has been processed'
else
echo 'Has not been processed'
fi

关于linux - 在多个目录中选择特定目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26261012/

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