查找子目录并在shell脚本中执行某些功能

时间:2014-02-04 20:00:00

标签: bash shell awk

我编写了以下代码,将一些列添加到子目录中的文件中,并合并目录中的所有文件,

 #!/bin/bash
 for sub in *
 do
   find . -name '*.bed' > log.txt
   while read path
   do
     filename=$(basename  "$path" | cut -d"." -f1)
     echo $filename
     awk -F'\t' '{print $1"\t"$2"\t"$3"\t""'$filename'""\t"$5"\t"$6"\t"$7}' $path  > temp.dat
     mv temp.dat $path
     find . -iname '*.bed' -exec cat {} \; > $f.txt
     mv $sub.txt $sub.bed
   done < log.txt
   rm log.txt
 done

然而问题是,当我遍历主目录时,它会选择子目录以及文件,我试图应用检查$ sub是否是目录的过滤器,但是它似乎不起作用不知何故。 所以这是文件层次结构 主目录 - &gt;子目录 - &gt; subsubdirectories - &gt;文件

1 个答案:

答案 0 :(得分:1)

查找

 #!/bin/bash
 for sub in *
 do
   find . -name '*.bed' > log.txt
   # ...
 done

您正在从基目录反复重复相同的find命令。你可能想做的是:

 #!/bin/bash
 for sub in */
 do
   find "$sub" -name '*.bed' > log.txt
   # ...
 done

这样,您将为每个子目录运行find一次。

*/确保只将目录作为循环参数,感谢glenn-jackman

修改并且,当David WCharles Duffy指出时,可以使用此构造跳过外部循环和log.txt

find */ -name '*.bed' -print0 | while IFS='' read -r -d '' path; do
   # Do stuff to $path as before ...
done