我想通過僅更改文件名的一部分並根據另一個文件的列表中的完全匹配來重命名一堆文件。舉例來說,如果我有這些文件的名稱:根據另一個文件的內容中的完全匹配重命名文件名的一部分
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