Mat*_*ens 5 bash filenames sort rename
我有以下目录结构:
.
??? event-a
? ??? album-a
? ? ??? a.jpg
? ? ??? x.png
? ??? album-b
? ??? a.jpg
? ??? x.png
? ??? y.gif
??? event-b
??? album-x
? ??? a.jpg
? ??? x.png
??? album-y
??? a.jpg
??? x.png
??? y.gif
Run Code Online (Sandbox Code Playgroud)
对于每个二级子文件夹(album-foo
在示例中命名),我想按名称对文件进行排序并将它们重命名为连续的填充数字,而不管它们的扩展名如何。文件夹可能包含 JPG、PNG 或 GIF 图像,并且应保留任何文件扩展名。
所以,在这种情况下,我想得到这个结果:
.
??? event-a
? ??? album-a
? ? ??? 01.jpg
? ? ??? 02.png
? ??? album-b
? ??? 01.jpg
? ??? 02.png
? ??? 03.gif
??? event-b
??? album-x
? ??? 01.jpg
? ??? 02.png
??? album-y
??? 01.jpg
??? 02.png
??? 03.gif
Run Code Online (Sandbox Code Playgroud)
主要问题是找出每个文件应该得到的数字。我是否需要使用嵌套for
循环来遍历event-x
和album-x
子文件夹,然后对于每个内部循环,自己跟踪数字,或者是否有一些我遗漏的聪明解决方案?
for dir in */*; do # loop over the directories
( # run in a subshell ...
cd "$dir" # ... so we don't have to cd back
files=(*) # store the filenames in a zero-indexed array
for index in "${!files[@]}"; do
file=${files[$index]}
ext=${file##*.}
newname=$(printf "%02d.%s" $((index+1)) "$ext")
mv "$file" "$newname"
done
)
done
Run Code Online (Sandbox Code Playgroud)
假设您有一个没有扩展名的文件。在这种情况下,它将具有相同的名称,除了前导数字(例如my_file
=> 05.my_file
)
所有非隐藏目录条目都将被重命名,包括目录。
归档时间: |
|
查看次数: |
2239 次 |
最近记录: |