【问题标题】:Select specific Directory among many Directories在多个目录中选择特定目录
【发布时间】:2014-10-08 15:42:09
【问题描述】:

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

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

. selectiveIteration.sh /Employee

父目录下的结构如下图 (员工目录包含按年 -> 月 -> 日 -> 小时划分的数据)

/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 脚本,所以如果这个问题太基础了,请原谅。努力学习。

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

【问题讨论】:

    标签: linux bash shell scripting


    【解决方案1】:

    要检查 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
    

    【讨论】:

      猜你喜欢
      • 2020-04-07
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多