如何使用mac bash脚本重命名目录中的50个文件?

时间:2017-11-12 02:41:15

标签: bash

我正在测试一个我用笑脸,皱眉和中性面孔制作的神经网络。我在不同的目录中有50张笑脸,50张皱眉脸和50张中性脸(.png)照片。

我想将每个类别中每个文件的名称更改为:

NeutralDraw0
NeutralDraw1
NeutralDraw2
.
.
.
NeutralDraw50

截至目前,它们被随意命名,因为我制作照片时并没有注意到这个名字。有一些名字,如"未命名"和" 3号和34号等等。

我想知道如何制作一个使用for循环等的bash脚本来重命名每个文件:

"Frowney/Smiley/Neutral" + "Draw" + Number

就像上面一样

1 个答案:

答案 0 :(得分:1)

问题是您有目标文件名的模式,但似乎没有源文件名。因此编写脚本来做到这一点很复杂。除非...

1)创建3个目录。

mkdir Frowney Smiley Neutral

2)手动将文件移动到正确的目录。

3)然后运行:

#!/bin/bash
#
dirs="Frowney Smiley Neutral"

# Verify that the directories exist
for dir in $dirs
do
    if [ ! -d $dir ]
    then
        echo "ERROR: missing $dir!"
        exit 1
    fi
done

# process the directories
for dir in $dirs
do
    echo "Processing $dir..."

    counter=0
    cd $dir
    /bin/ls -c1 | while read -r file
    do
        ext="${file##*.}"
        cp "$file" ../${dir}Draw$counter.$ext
        (( counter = counter + 1 ))
    done
    cd ..
done

注1:我没有Mac来测试它,我是在Linux上做的。我希望(并且认为)Mac上的bash与Linux上的bash并没有太大区别。我没有使用标准bash不提供的任何奇怪的函数或命令。

注2:我使用的是cp命令,而不是mv。这样它就不会修改你的来源。如果脚本做了一些奇怪的事情,你就不会丢失你的源文件。满意后,删除3个目录。

注3:文件名称中可以有空格,while循环可以处理。

注4:如果你有多于或少于50个文件,脚本不关心,它只是一个计数器。