重命名许多与条件的命令行中的文件



我有一个曲目,其中一些文件必须重命名:

alabama.txt   california1.txt   california2.txt   california3.txt   florida.txt

californiaX.txt文件应重命名为cX.txtX是一个数字。

这是我尝试的:

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

使用 mvbash substring-retatraction使用

for file in california*.txt
do
    mv -v -- "$file" "${file:0:1}${file:10:1}.${file#*.}"
done

在这里,--是一个内置的bash,用于表示命令选项的结尾,之后仅接受位置参数,而不再需要命令标志。亚弦提取部分

$ {string:position}和$ {字符串:位置:长度}

'字符串指定我们的变量名称和"位置"是我们从中提取信息的起点。我们可以使用"长度"来进一步调整此功能。范围。当长度与位置一起使用时,这意味着显示从位置x开始的信息。

最新更新