我有檔案名 filename.gz.1,我需要將它們重命名為 filename.gz,有很多檔案,每個名稱都不一樣,
我知道我不能這樣for i in $(ls); do mv $i $i.1; done做,但是我可以反過來做,從 filename.gz.1 到 filename.gz 并保留原始檔案名嗎?
我試過這個,
for i in $(ls | grep "xz\|gz"); do echo "mv $i $i | $(rev) | $(cut -c3-) | $(rev) |)"; done
但這忽略了我的管道。
誰能幫我?
uj5u.com熱心網友回復:
您可以使用
for i in ...;
do
echo "$i --> ${i%.*}"
done
該${i%.*}會在結尾處,洗掉(%)有什么期,隨后被任何匹配(.*)
uj5u.com熱心網友回復:
你必須使用--extended-regexp使用管道作為分離的時候。
echo -e "foo.xz\nbar.gz\nbaz" | grep -E "(xz|gz)"
并且不要ls用于列出您的檔案,它不會保存。相反,您可以使用回圈來搜索檔案。
for file in /PATH/TO/FILES; do
echo $file
done
我還建議使用正則運算式來搜索以數字結尾的檔案名,例如...
if [[ $file =~ [[:digit:]]$ ]]; then
echo ${file%.*}
fi
uj5u.com熱心網友回復:
我能夠像這樣解決它:
for i in $(ls | grep "xz\|gz"); do echo "mv $i $i" | rev | cut -c3- | rev; done | bash
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/314562.html
