免责声明:我正在使用Mac OSX。bash脚本与需要处理的文件位于不同的目录中。从这里开始我的奋斗……
帮助1:我有多个文件,每个文件都存放在父目录的子目录中,需要将其作为我的生物信息学工具的输入文件。我发现for循环对此适用。
for file in ~/Desktop/parent\ folder/*/*.txt;
do exTool INPUT= ${file##*/} OUTPUT= ${file%.txt}_exd.txt
我希望输入文件(通过剪切附加到$ file的文件夹列表),然后输出文件,删除“ .txt”并添加_exd.txt。我得到的错误是输入携带文件夹列表,特别是空格“ parent \ folder”引起错误的输入信息。
帮助2:作为第一种情况的扩展,如果要将文件输出到与输入相同的子目录中,是否必须添加特殊命令?
帮助3:如果我在每个子目录(input_1.txt和input_2.txt)中都有2个文件,我想将两个文件都输入到一个命令中。如果嵌套在for循环中,脚本将如何显示?
for file in ~/Desktop/parent\ folder/*/*.txt;
do bioTool INPUT1= ${file%.txt}_1.txt INPUT2= ${file%.txt}_2.txt OUTPUT= ${file%%.*}
对于输出,请注意,我只需要基本文件名,因为该工具将在名称末尾附加一个数字,以表示第一个和第二个文件输出以及扩展名。由于某种原因,我觉得for循环中“ in”之后的部分执行不正确。将脚本放置在与文件不同的目录中,这是一个令人讨厌的解决方案。
任何帮助将不胜感激,支持,喜欢,接受,喜欢。非常感谢您的帮助。
帮助1
由于空白,您需要引用以下内容:
INPUT= "${file##*/}" OUTPUT= "${file%.txt}"_exd.txt
但是,INPUT=
文件名和文件名之间有一个空格,这似乎有些奇怪。
帮助3
如果您有文件,input_1.txt
则${file%.txt}_1.txt
成为input_1_1.txt
。
我将匹配确切的文件名:
for file in ~/Desktop/parent\ folder/*/input_1.txt; do
bioTool INPUT1= "${file}" INPUT2= "${file%_1.txt}_2.txt" OUTPUT= "${file%%.*}"
done
帮助4
那根本没有壳的东西。
更改为子目录
for file in ~/Desktop/parent\ folder/*/input_1.txt; do
subdir="${file%/*}"
pushd "$subdir" &>/dev/null
file="${file##*/}"
bioTool INPUT1= "${file}" INPUT2= "${file%_1.txt}_2.txt" OUTPUT= "${file%%.*}"
popd &>/dev/null
done
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句