我正在测试一个我用笑脸,皱眉和中性面孔制作的神经网络。我在不同的目录中有50张笑脸,50张皱眉脸和50张中性脸(.png)照片。
我想将每个类别中每个文件的名称更改为:
NeutralDraw0
NeutralDraw1
NeutralDraw2
.
.
.
NeutralDraw50
截至目前,它们被随意命名,因为我制作照片时并没有注意到这个名字。有一些名字,如"未命名"和" 3号和34号等等。
我想知道如何制作一个使用for循环等的bash脚本来重命名每个文件:
"Frowney/Smiley/Neutral" + "Draw" + Number
就像上面一样
答案 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个文件,脚本不关心,它只是一个计数器。