我想從我的所有文件名在當前目錄刪除一堆文件
for filename in *.fasta;do
echo $filename | sed \e 's/test.extra//g'
done
刪除test.extra的文件名中的一部分,但它抱怨不成立file.echo是要確保它正確列出。
我想從我的所有文件名在當前目錄刪除一堆文件
for filename in *.fasta;do
echo $filename | sed \e 's/test.extra//g'
done
刪除test.extra的文件名中的一部分,但它抱怨不成立file.echo是要確保它正確列出。
首先使用的,而不是 '\ E'
'的sed -e' 的,我會建議你做在bash這樣
for filename in *.fasta; do
[ -f "$filename" ] || continue
mv "$filename" "${filename//test.extra/}"
done
我的文件名有空格。修改上面的內容並使用下面的行爲我工作''mv「$ filename」「$ {filename // test.extra /}」' – Ramesh
Ramesh你是對的。引用參數擴展是常規和良好的做法,尤其是如果它們包含文件名 – hostmaster
首先,您有\e
而不是-e
。
嘗試rename
命令:
rename 's/test.extra//g' *.fasta
什麼'rename'命令是這樣的?我找不到支持sed-like替換語法的程序。 – unwind
這個重命名的版本實際上是perl包的一部分。 – hostmaster
@unwind正確。我經常使用它,所以我忘了它不是本地人。抱歉! –
嘗試rename "extra.test" "" *
$ find
./extra.test-eggs.txt
./extra.testbar
./fooextra.test
./ham-extra.test-blah
$ rename "extra.test" "" *
$ find
./-eggs.txt
./bar
./foo
./ham--blah
$ mmv '*test.extra*.fasta' '#1#2.fasta'
這是安全的,因爲mmv
根本不會做任何事情,否則它會覆蓋現有文件(有命令行選項可以關閉此功能)。
我知道這胎面老了,但是下面oneliner,從驗證答案的啓發,對我幫助很大;)
for filename in ./*; do mv "./$filename" "./$(echo $filename | sed -e 's/test.extra//g')"; done
是的,它是正確的,但想一分鐘那裏有一個目錄(不是文件)。 – hostmaster
請提供您正在處理的文件名滿的一些例子。 – unwind
你想在全球範圍內刪除'test.extra'嗎?我的意思是替換所有匹配,而不僅僅是第一個? – hostmaster