我试图遍历目录中的所有文件和
我能够单独为每个文件执行此操作(即,如果我实际使用文件的名称,每行都可以工作),但我无法使for循环工作。我对此很陌生,所以我可能做了一些简单的错误。
谁能看到我哪里出错了?
for i in path_to_files; do
#copy to home directory (from scratch)
cp $i .
#Run IDBA
idba_ud -l $i -o '$i'_out
#remove file from work directory (limited space)
rm $i
#copy out directory back to scratch
cp -r '$i'_out path_to_files
done
我一直收到错误消息
意外标记`cp'附近的语法错误。
我也尝试用copy和i / $ i替换cp而没有运气。
答案 0 :(得分:0)
如果这确实是 POSIX兼容shell (你的代码看起来很可疑,但你还没有指定实际使用的shell),那么:
如果文件名包含空格或其他奇怪的字符,则始终引用文件名:
但你应该不使用单引号,因为这会阻止shell扩展你的变量。
将文本附加到替换变量时,请使用${}
表示法(例如,如果$i
扩展为" murgel",则${i}foo
将扩展为&# 34; murgelfoo",而$ifoo
将扩展为""(空字符串)如果没有变量ifoo
)
这样试试:
filepath=/path/to/files
for i in "${filepath}"/*; do
#copy to home directory (from scratch)
cp "${i}" .
#Run IDBA
idba_ud -l "${i}" -o "${i}_out"
#remove file from work directory (limited space)
rm $i
#copy out directory back to scratch
cp "${i}_out"/* "${filepath}"/
done