我想通过仅更改文件名的一部分并根据另一个文件的列表中的完全匹配来重命名一堆文件。举例来说,如果我有这些文件的名称:根据另一个文件的内容中的完全匹配重命名文件名的一部分
sample_ACGTA.txt
sample_ACGTA.fq.abc
sample_ACGT.txt
sample_TTTTTC.tsv
sample_ACCCGGG.fq
sample_ACCCGGG.txt
otherfile.txt
,我想根据这些精确的匹配,这是在所谓的replacements.txt另一个文件中查找和替换:
ACGT name1
TTTTTC longername12
ACCCGGG nam7
ACGTA another4
使所需的结果文件名将是
sample_another4.txt
sample_another4.fq.abc
sample_name1.txt
sample_longername12.tsv
sample_nam7.fq
sample_nam7.txt
otherfile.txt
我不想更改内容。到目前为止,我已经根据我在本网站上的搜索结果尝试过sed
和mv
。随着sed
我发现了如何利用我的名单替换该文件的内容:
while read from to; do
sed -i "s/$from/$to/" infile ;
done < replacements.txt,
与mv
我已经找到一种方法来重命名文件,如果有一个简单的替换:
for files in sample_*; do
mv "$files" "${files/ACGTA/another4}"
done
但我怎么能把他们放在一起做我想做的事情?
谢谢你的帮助!
谢谢,Qeole。我不能让'sed'命令工作...我需要为我的情况编辑一些东西吗?我还尝试过使用'mv'的第一个解决方案,在对我的replacements.txt文件进行排序后应该可以工作,就像Joe上面给出的答案一样。 – user2250055
@ user2250055我写的第一个'sed'行只对'.txt'文件有效。问题是否可以从这个问题来解决你输入了什么命令? – Qeole
我完全复制并粘贴了你的命令,但大多数情况下,我指的是'sed'循环...我得到每个文件的错误,例如:mv:can not stat'sample_ACGTA':没有这样的文件或目录。有什么想法吗?正如你所提到的,'sed'命令行的一个作用不同,只是它不处理非.txt扩展名。再次感谢! – user2250055