mv:目标‘Nfilename’不是目录错误帮助

mv:目标‘Nfilename’不是目录错误帮助

我对 Ubuntu 和编码还不熟悉,但必须使用它来对分子测序数据进行一些分析,但我遇到了困难!

我最近将我的笔记本电脑换成了一台功能更强大的 PC(两者都安装了虚拟机),我的部分脚本现在不再起作用了。

我用来将一个文件(Map.txt)拆分为单个文件,然后重命名每个文件,最后将原始文件中的标题行添加到每个单个文件的代码是:

$ tail -n +2 Map.txt | split -l 1

$ awk '{cmd="echo " $0 ">" $1; system(cmd)}' x*

$ for file in `ls N*`; do echo "`head -1 Map.txt`" > tmp; cat $file >> tmp; mv –f tmp $file; done

每个命令都单独运行,但现在我收到一条错误消息:

mv: target 'NC2B7' is not a directory

当我运行上面的第三个命令 ($ for file in etc)。我不确定为什么这个命令突然不起作用,我之前在笔记本电脑上使用旧的 Oracle VM VirtualBox,现在使用 Oracle VM VirtualBox v5.2.18 和 ubuntu 16.04 来运行 QIIME。

有人能告诉我造成这种情况的原因是什么以及/或第三个命令现在应该是什么吗?

答案1

改变

$ for file in `ls N*`; do echo "`head -1 Map.txt`" > tmp; cat $file >> tmp; mv –f tmp $file; done

$ for file in `ls N*`; do echo "`head -1 Map.txt`" > tmp; cat $file >> tmp; mv -f tmp $file; done

区别不太明显,但您在命令中使用了长破折号,而不是mv-command、-f-option 中的普通破折号。我测试过了,确实有效。

为了防止文件名包含空格,您应该添加一些双引号:

$ for file in `ls N*`; do echo "`head -1 Map.txt`" > tmp; cat "$file" >> tmp; mv -f tmp "$file"; done

您还可以将整个命令简化为

$ for file in N*; do head -1 Map.txt > tmp; cat "$file" >> tmp; mv -f tmp "$file";

这是@PerlDuck 建议的。当然,我在将此建议添加到此答案之前对其进行了测试。

相关内容