linux shell 命令 mv 许多文件

标签 linux shell mv

我有很多文件,例如 1a1、2a2、3a3,我想将文件名转换为 1b1、2b2、3b3。这意味着将这些文件名中的 'a' 替换为 'b'

我试过这样的命令:

for f in */*; do
  mv "$f" "${f/a/b}"
done
ls | xargs -i mv {} ${{}/a/b}  
ls | xargs -i mv {} \`echo {}|tr -t 'a' 'b'\`

但没有一个有效。 我知道一个命令 重命名 'a' 'b' * 能行得通。

但我仍然想弄清楚如何使用forxargsother cmds 来完成这项工作。毕竟,在日常使用中,它们比简单的 rename 命令通用得多。

请帮助我,谢谢。

最佳答案

#!/bin/bash
for old in *
do new=$(echo "$old" | sed -e 's/a/b/')
   echo mv "$old" "$new" &>2
   mv "$old" "$new"
done

在学习如何使用 sed(1) 命令进行名称转换时,此示例将允许您猜测更复杂的名称转换。

程序将所有的命令行参数遍历到for循环中,在每个循环中,程序得到一个新的变量new,并将原来的$old名称进行改造.然后你只需要用旧值和新值执行命令。

关于linux shell 命令 mv 许多文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40150594/

相关文章:

Linux sendmail 命令在 cron 中不发送邮件

shell - 须藤:apt-get:找不到命令

bash - 找不到命令时的安全 shell 重定向

linux - Bash 通过 FOR 重命名

linux - 如何在 Linux 内核 3.2.x 中的自定义系统调用期间读取目录的内容

android - 编译 Android Studio Vulkan 示例

c - 编写 C 动态库 [DSOs] 的良好实践(二进制兼容性 + 内存管理)

shell - GItLab CI 给出了curl : (7) Failed to connect to localhost port 8090: Connection refused

将文件从一个包含大量文件的目录移动到一个月文件夹的 Bash 脚本

linux - Bash 脚本 : "Dump" directory using mv - current directory