我编写了以下代码,将一些列添加到子目录中的文件中,并合并目录中的所有文件,
#!/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;文件
答案 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 W和Charles Duffy指出时,可以使用此构造跳过外部循环和log.txt
:
find */ -name '*.bed' -print0 | while IFS='' read -r -d '' path; do
# Do stuff to $path as before ...
done