我有多个目录,每个目录包含多个文件:
folder1
file1.jpg
file2.jpg
file3.jpg
folder2
file1.jpg
file2.jpg
file3.jpg
我想像这样替换:
folder1
0001.jpg
0002.jpg
0003.jpg
folder2
0001.jpg
0002.jpg
0003.jpg
我的 bash 脚本...
start_dir="/path/to/folder/"
find "$start_dir" -name '*.jpg' -type f \
|sort \
|while read name; do
((i++))
mv -i "$name" \
"$(printf '%s/%04u%s' "$(dirname "$name")" $((i)) "$(basename ".jpg")")"
done
这样做:
folder1
0001.jpg
0002.jpg
0003.jpg
folder2
0004.jpg
0005.jpg
0005.jpg
如何获取该文件替换开头为0001每个文件夹中都有 .jpg 吗?
答案1
在循环中分别处理每个子目录
start_dir="/tmp/start/"
find "$start_dir" -name '*' -type d \
|sort \
|while read folder; do
i=0
find "$folder" -maxdepth 1 -name '*.jpg' -type f \
|sort \
|while read name; do
((i++))
mv -i "$name" \
"$(printf '%s/%04u%s' "$(dirname "$name")" $((i)) "$(basename ".jpg")")"
done
done
从
ls -R
.:
fold1 fold2
./fold1:
43.jpg aa.jpg a.jpg
./fold2:
ba.jpg bb.jpg wbb.jpg
到
ls -R
.:
fold1 fold2
./fold1:
0001.jpg 0002.jpg 0003.jpg
./fold2:
0001.jpg 0002.jpg 0003.jpg
工作时不会发生碰撞
答案2
尝试这样做,而不是((i++))
if [[ $tmpdir == $(dirname $name) ]] ; then
i=i+1;
else
i=0;
fi
tmpdir=$(dirname $name)