我需要一个Bash脚本来执行所有没有特定文件的目录的程序,并在同一个目录下创build输出文件。这个程序需要一个input文件,它存在于每个目录下,名字是* .DNA.fasta。假设我有以下目录也可能包含子目录
dir1/a.protein.fasta dir2/b.protein.fasta dir3/anyfile dir4/x.orf.fasta
我已经开始find没有特定文件名称是* .protein.fasta的目录
在这种情况下,我想dir3和dir4被列出(因为他们不包含*.protein.fasta )我已经试过这个代码:
find . -maxdepth 1 -type d ! -exec test -e '{}/*protein.fasta' ; -print
但似乎我错过了一些不起作用的东西。 我也不知道如何处理整个故事。
查找并重命名一个目录
如何在使用execvp后释放由malloc创build的内存?
如何在AndroID / Java低优先级执行linux命令?
硬盘温度不会通过网页显示
如何在find中使用-exec内的pipe道
为什么在linux上执行fork或exec之后RliMIT_STACK丢失了?
如何使用find -exec删除部分文件扩展名
没有结果!! 使用fork()以2个pipe道使用dup2运行execlp()
不能执行exec命令(PHP / windows / ffmpeg)
如何在linux上通过exec选项传递查找命令
这是一个棘手的问题。
我想不出一个好的解决办法。 但是,这里有一个解决方案。 请注意,如果您的目录或文件名包含换行符,则可以保证不起作用,如果它们包含其他特殊字符,则不能保证能够正常工作。 (我只测试过你的问题中的样品。)
另外,我还没有包含-maxdepth因为你说你也需要搜索子目录。
#!/bin/bash # Create an associative array declare -A excludes # Build an associative array of directorIEs containing the file while read line; do excludes[$(dirname "$line")]=1 echo "excluded: $(dirname "$line")" >&2 done <<EOT $(find . -name "*protein.fasta" -print) EOT # Walk through all directorIEs,print only those not in array find . -type d | while read line ; do if [[ ! ${excludes[$line]} ]]; then echo "$line" fi done
对我来说,这返回:
. ./dir3 ./dir4
所有这些目录都不包含匹配*.protein.fasta的文件。 当然,你可以用你需要做的这些目录来替换最后一个echo "$line" 。
交替:
如果你真正想要的只是在任何子目录中不包含匹配文件的顶级目录列表,下面的bash单行可能就足够了:
for i in *; do test -d "$i" && ( find "$i" -name '*protein.fasta' | grep -q . || echo "$i" ); done
#!/bin/bash for dir in *; do test -d "$dir" && ( find "$dir" -name '*protein.fasta' | grep -q . || Programfoo"$dir/$dir.DNA.fasta"); done
总结以上是内存溢出为你收集整理的运行程序的bash脚本,用于没有特定文件的目录全部内容,希望文章能够帮你解决运行程序的bash脚本,用于没有特定文件的目录所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)