根据源文件重命名文件

时间:2014-12-04 07:16:07

标签: shell for-loop awk while-loop

我有224个pdf文件,我想在文件前加上一个数字和_

实施例: stackoverflow_nov_2014.pdf

文件accounts.csv包含: 2567,计算器

所以我们的目标是获取2567并使用下划线将其作为pdf文件的前缀: 2567_stackoverflow_nov_2014.pdf

我想我想在while循环中使用read -r,如下所述: https://unix.stackexchange.com/questions/147569/rename-a-batch-of-files-after-reading-from-a-source-file

但是在编写时,shell会使用mv命令,并且文件没有任何变化。

编辑:从源文件(accounts.csv)中添加样本数据

11,My_Golf_Shop
2567,stackoverflow    
11122,Test_Store

顺便说一句,源文件(accounts.csv)与目录中的文件的顺序与accounts.csv的顺序不同,所以不知何故需要与文件名和accounts.csv匹配发生了。

1 个答案:

答案 0 :(得分:1)

以下是应该在假设下工作的脚本: 1.所有文件都在同一个文件夹下 2.对于特定前缀,此脚本仅重命名找到的第一个文件。

#!/bin/bash
while read -r line; do
    num=`echo $line |cut -f 1 -d ","`
    prefix=`echo $line |cut -f 2 -d ","`
    if [ -n "$num" -a -n "$prefix" ]; then
        full_file=$(basename `eval find . -name '$prefix\*' -print -quit` 2>/dev/null ) 
        mv $full_file ${num}_$full_file 2>/dev/null
    fi
done < accounts.csv