【发布时间】:2021-12-12 07:26:47
【问题描述】:
我正在尝试通过使用 find 函数在一堆子目录中循环来运行特定程序,但似乎没有任何反应。这是我的代码:
for FILE in $(find ~/test -maxdepth 1 -type f -name '*.vcf'); do
dotnet ~/Nirvana/Nirvana.dll \
-c ~/Nirvana/Data/Cache/GRCh37/Both \
--sd ~/Nirvana/Data/SupplementaryAnnotation/GRCh37 \
-r ~/Nirvana/Data/References/Homo_sapiens.GRCh37.Nirvana.dat \
-i $FILE \
-o ~/test/annotTest/$FILE.vcf.gz
done
使用 set -x 调试似乎指向以下行:
++ find /home/test -maxdepth 1 -type f -name '*.vcf'
+ set +x
我很确定程序的参数是正确的,因为当我只在一个文件上使用它时它们可以工作,但循环它什么也没做。
我的代码中是否有一些我没有看到的错误?
谢谢!
【问题讨论】:
-
for FILE in $(find ~/cfile/test -maxdepth 1 -type f -name '*.vcf'); do echo "$FILE" done的输出是什么样子的?此外,请确保文件名不包含空白字符(空格、制表符等)。如果确实如此,您的代码就会中断。 -
嗯,运行它不会返回任何东西 - 只是转到一个空的 bash 行。编辑添加:文件名中有破折号“-”,这也会导致中断吗?
-
@vanish007 文件名中的破折号应该不是问题。
ls ~/test/*.vcf会列出它们吗? -
@GordonDavisson
ls ~/test将列出包含文件的文件夹,但命令 'ls ~/test/*.vcf` 表示ls: cannot access /home/test/*.vcf: No such file or directory -
@vanish007
-maxdepth 1告诉find只搜索 /home/test,而不是它的子目录。find认为~/test位于深度 0,其中的项目(文件和目录)位于深度 1,~/test内的项目(目录)内的项目位于深度 2。所以如果你想要它在子目录中查找东西,使用-maxdepth 2。虽然,实际上,我只是使用 shell 通配符表达式:for file in ~/test/*/*.vcf。 (请注意,小写或混合大小写的变量名称通常是很好的做法)。
标签: .net bash for-loop unix find