linux - 重命名文件夹中的部分多个文件

标签 linux bash shell

我有多个文件,如下

abcd_q1_2018.pdf
abcd_q2_2018.pdf
accc_q1_2018.pdf
accc_q2_2018.pdf
axxx_q2_2018.pdf

和一个包含

的文本文件
abcd 1111
accc 2222
axxx 3333

现在我想将上面的文件重命名为

1111_q1_2018.pdf
1111_q2_2018.pdf
2222_q1_2018.pdf
2222_q2_2018.pdf
3333_q2_2018.pdf

请帮忙。

最佳答案

我喜欢 for 循环,所以这里有一些 for 循环!

外循环遍历重命名映射,内循环将重命名映射应用于目录中的每个文件。

   IFS=$'\n' # So we can march through the map line-by-line 
   for key in `cat rename_map`; do 
      orig=`echo ${key} | awk '{print $1}'`
      new=`echo ${key} | awk '{print $2}'`
      for file in *_2018.pdf; do 
        new_file=`echo ${file} | sed -e "s/^${orig}/${new}/"` # ["] for variable sub
        mv ${file} ${new_file}                                # Rename it!
      done 
    done

关于linux - 重命名文件夹中的部分多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56855741/

相关文章:

bash - 有没有办法在 bash bang 模式中允许空格(重复上一个命令)

bash - 解析系统日志以计算特定值

python - 如何将错误消息从 shell 脚本传递到 Python 脚本?

c - 文件指针是否导致代码中的段错误

linux - 在 Linux 中通过 IMAP 通过互联网获取外部邮件

linux - 是否可以使用 Linux sort 命令按每行末尾的数字对巨大的文本文件进行排序?

android - Android 上的 C++ 代码 - execl() 函数调用失败

linux - AWK 在 system() 中插入变量值

linux - BASH 空白别名到 'cd'

Bash 格式的十六进制字符串