寻找子目录并在Shell脚本中执行一些功能



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

 #!/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是否为目录的过滤器,但是它似乎不起作用不知何故。所以这是文件层次结构主目录 ->子目录 -> subsubdirectories->文件

外观:

 #!/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 W和Charles Duffy指出的那样,可以使用此结构跳过外循环和log.txt

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

相关内容

  • 没有找到相关文章

最新更新