对于文件
test_001.log
test_002.log
我想将它们重命名为
001_test.log
002_test.log
我认为它应该像
for f in *.log; do mv "$f" "`echo $f | sed s/test_\(.*\)\.log/\1_test.log/`"; done
但我收到了错误
mv: `test_001.log' and `test_001.log' are the same file
我在这里做错了什么?
答案 0 :(得分:1)
以下是工作片段:
for f in *.log; do mv $f `echo $f | sed 's/test_\(.*\)\.log/\1_test.log/'`; done;
我认为你错过引用's/test_\(.*\)\.log/\1_test.log/'
并且可能没有返回你期望的内容。
答案 1 :(得分:1)
只需使用shell参数扩展并且无需外部工具即可实现:
$ for f in *.log; do fnew=${f#test_}; echo mv "$f" "${fnew%.log}"_test.log; done
mv test_001.log 001_test.log
mv test_002.log 002_test.log
删除echo
以实际执行这些命令。
请注意,由于单词拆分和路径扩展,命令中不带引号的$f
可能会使包含空格或shell元字符的文件名中断。