2014-10-08 45 views
1

我正在尝试编写一个shell脚本,该脚本可以遍历父目录下的所有目录,并跳过叶级别具有空文件夹“I_AM_Already_Processed”的目录。作为在多个目录中选择特定的目录

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

父目录下
. selectiveIteration.sh /Employee 

结构如下所示 (雇员目录包含每年岔数据 - >月 - >日用 - >按小时计算)

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

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

让我们考虑三个小时的数据为日期:2014年10月8日

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脚本,所以如果这个基本问题请问,请原谅。试图学习。

任何建议是值得欢迎的。提前致谢。

回答

0

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