我有一个曲目,其中一些文件必须重命名:
alabama.txt california1.txt california2.txt california3.txt florida.txt
californiaX.txt
文件应重命名为cX.txt
,X
是一个数字。
这是我尝试的:
ls | sed 's/california/c/'
但这无法存储结果。阅读其他一些帖子,我尝试添加sh
,但它说"找不到命令"。
ls | sed 's/california/c/' | sh
rename
命令都无法正常工作(我在Mac上)。mv
命令仅适用于文件。因此,我尝试了一个循环,同样的循环不起作用:
for file in california*; do mv file c*; done
欢迎任何有关我做错了什么的信息。
变量时,应以$为$(声明时,不是)。而且,您应该将参数变为"文件"变量:
for file in california*; do mv "$file" "${file/california/c}"; done
要重命名文件,您需要:1。旧名称,2。新名称。
您的尝试要么获取旧名称或新名称。没有一个尝试同时找到两个。
这是您将尝试解决方案的尝试:
for file in california*
do
newname=$(echo "$file" | sed 's/california/c/')
mv "$file" "$newname"
done
这可以用参数扩展编写更多的规范写入:
for file in california*
do
mv "$file" "c${file#california}"
done
使用 mv
与 bash
substring-retatraction使用
for file in california*.txt
do
mv -v -- "$file" "${file:0:1}${file:10:1}.${file#*.}"
done
在这里,--
是一个内置的bash
,用于表示命令选项的结尾,之后仅接受位置参数,而不再需要命令标志。亚弦提取部分
$ {string:position}和$ {字符串:位置:长度}
'字符串指定我们的变量名称和"位置"是我们从中提取信息的起点。我们可以使用"长度"来进一步调整此功能。范围。当长度与位置一起使用时,这意味着显示从位置x开始的信息。