Bash脚本:将图像文件从源目录复制到目标目录,并在具有相同文件名的文件上添加额外的后缀

时间:2013-11-27 02:01:39

标签: image bash text rename

我有这个脚本将图像文件从源目录复制到目标目录。源目录中有一些图像文件具有相同的名称但文件大小不同。此脚本还使用 stat 命令比较具有相同名称的两个文件。现在,我想添加一个字符串后缀,例如IMG0897.DUP.JPG在具有相同文件名的文件的文件扩展名之前将被复制到目标文件夹。目前,我的脚本将文件的文件大小添加到文件名中。

我需要有关如何添加我自己的文本字符串而不是文件大小的帮助。 这是我的剧本:

#!/bin/sh
SEARCH="IMG_*.JPG"
SOURCE= $1
DEST=$2
test $# -ne 2 && echo Usage : phar image_path archive_path
if [ ! -e $1 ]
then  echo Source folder does not exist
fi
if [ ! -e $2 ]
then mkdir $2/
fi
# Execute the script.

    if [ "${SEARCH%% *}" = "$SEARCH" ]; then
        command="find \"$1\" -name \"$SEARCH\""
    else
        command="find \"$1\" -name \"${SEARCH%% *}\""$(for i in ${SEARCH#* }; do echo -n " -o -name \"$i\""; done)
    fi

    # Run the main loop.
    eval "$command" | while read file; do
        bn=$(basename "$file")
        bc=$(stat -c%s "$file")
        if [ -f "${2}/$bn" ] && [ "$bc" -ne $(stat -c%s "${2}/$bn") ]; then
        bn="$bn.$bc"
     fi
        if [ -f "${2}/$bn" ]; then
            echo "File ${2}/$bn already exists."
        else
            echo "Copying $file to $2/$bn"
            cp -a "$file" "$2/$bn"
        fi
    done
    exit 0
else
    echo "Error : Can't find $1 or $2"
    exit 1
fi

1 个答案:

答案 0 :(得分:0)

我稍微修改了你的脚本。

#!/bin/sh
SEARCH="IMG_*.JPG"
SOURCE=$1
DEST=$2
SUFFIX=DUP
test $# -ne 2 && echo Usage : phar image_path archive_path
if [ ! -e $1 ]
then  echo Source folder does not exist
fi
if [ ! -e $2 ]
then mkdir $2/
fi
# Execute the script.

    if [ "${SEARCH%% *}" = "$SEARCH" ]; then
        command="find \"$1\" -name \"$SEARCH\""
    else
        command="find \"$1\" -name \"${SEARCH%% *}\""$(for i in ${SEARCH#* }; do echo -n " -o -name \"$i\""; done)
    fi

    # Run the main loop.
    eval "$command" | while read file; do
        bn=$(basename "$file")
        bc=$(stat -c%s "$file")
        if [ -f "${2}/$bn" ] && [ "$bc" -ne $(stat -c%s "${2}/$bn") ]; then
            bc=$(echo ${bn}|cut -d. -f2)
            bn=$(echo ${bn}|cut -d. -f1)
            bn=$bn.$SUFFIX.$bc**
        fi
        if [ -f "${2}/$bn" ]; then
            echo "File ${2}/$bn already exists."
        else
            echo "Copying $file to $2/$bn"
            cp -a "$file" "$2/$bn"
        fi
    done
    exit 0
else
    echo "Error : Can't find $1 or $2"
    exit 1
fi

我的执行结果是:

  

root @ exact32:/ vagrant #sh JPG_moves.sh / root / dir1 / / root / destination /   将/root/dir1/IMG_0897.JPG复制到/root/destination//IMG_0897.JPG

     

root @ exact32:/ vagrant #sh JPG_moves.sh / root / dir2 // root / destination /   将/root/dir2/IMG_0897.JPG复制到/root/destination//IMG_0897.DUP.JPG